- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在旧设备上使用非官方 API 从 Stock Google Calendar
获取事件。现在我正在重构代码以使用 android.content.ContentResolver.query()
的 selection
和 selectionArgs
而不是仅手动绑定(bind) 选择
(生成有效的 SQL 并在我的测试设备 [2.2 和 2.3.3] 上正常工作)。
问题:如果我立即绑定(bind)参数(例如:deleted = 0
),我的测试应用程序返回预期的事件,但是当 Android 绑定(bind)时(例如:deleted = ?
with String[] { "0"}
没有返回任何事件。忽略 selectionArgs
的原因是什么?
LogCat 显示没有错误。
示例(预期)
STATIC: cursor=225
DYNAMIC: cursor=255
返回 255 个事件,因为我的日历今年有 255 个事件发生。
示例(测试用例)
测试于:Motorola Milestone、CyanogenMod 7 (Android 2.3.3)。
STATIC: cursor=225
DYNAMIC: cursor=0
我假设(但希望我做错了什么)Android 或日历应用程序无法绑定(bind)。我发现了一个有类似问题的错误报告,但我不确定日历应用程序是否受到影响:http://code.google.com/p/android/issues/detail?id=4467
代码
package com.example;
import java.util.Calendar;
import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
/**
* Related bugs?
*
* - http://code.google.com/p/android/issues/detail?id=4467
*/
public class CalendarCursorTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Calendar begin = Calendar.getInstance();
Calendar end = Calendar.getInstance();
end.add(Calendar.YEAR, 1);
String uriPrefix = Build.VERSION.SDK_INT >= 8 ? "content://com.android.calendar" : "content://calendar";
Uri uri = Uri.parse(uriPrefix + "/instances/when/" + begin.getTimeInMillis() + "/" + end.getTimeInMillis());
String[] projection = null;
String sortOrder = null;
// test static - log() returns: STATIC: cursor=225 => 225 events found
{
String selection = "deleted = 0";
String[] selectionArgs = null;
log("STATIC: ", getBaseContext().getContentResolver().query(
uri, projection, selection, selectionArgs, sortOrder));
}
// test dynamic - log() returns: DYNAMIC: cursor=0 => no events found (!)
{
String selection = "deleted = ?";
String[] selectionArgs = new String[] { "0" };
log("DYNAMIC: ", getBaseContext().getContentResolver().query(
uri, projection, selection, selectionArgs, sortOrder));
}
}
public void log (String title, Cursor c) {
Log.d(getClass().getName(), String.format(
"%s cursor=%s", title, c == null ? "null" : c.getCount()));
}
}
最佳答案
CalendarProvider 似乎在这里有一个错误。
query
的实现简单地忽略了用户提供的 selectionArgs
参数。
如果比较 Android 2.3.3 中的实现和 Android 4.0.3您会注意到他们添加了 selectionArgs
作为参数,并构建了他们自己的和用户提供的 combine
。
错误已在此处修复:Support cleanup of Calendar.java
关于Android Stock Calendar 或 android.content.ContentResolver.query() 忽略 selectionArgs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10289302/
我在 stack overflow 中回答了一个问题,提出这个问题的用户问我: SQlite Query in android using cursor why i must give my sele
我正在尝试创建一个游标加载器,我想在其中查询两个项目的特定列,类似于: SELECT * FROM TABLE_NAME WHERE COLUMN_NAME IN(something, somethi
我正在尝试使用以下内容: String dbquery = "Select * From stops where stopname LIKE '%?%' LIMIT 100"; String[] ui
我有一个包含 BLOB 列的表(它只有 16 个字节)。我想运行 SELECT * FROM myTable WHERE blobColumn = ? 形式的查询并将字节数组绑定(bind)到该列。理
我想使用选择查询从表中检索数据。我发现,SQLiteDatabase 类的 rawQuery(query, selectionArgs) 方法可以检索数据。但是我不知道 query 和 selecti
这个问题已经有答案了: PreparedStatement IN clause alternatives? (33 个回答) 已关闭 8 年前。 我遇到过这个问题: Caused by: java.l
我正在尝试显示特定文件夹中的音频文件。文件夹由用户选择并添加到 arraylist,因此 arraylist 是动态的。现在,当我查询多个文件夹时,mediaStore 不会返回任何结果。我认为问题出
我正在为 RecyclerView.Adapter 使用 Loader 来列出项目。我想列出数据库表中的特定项目。所以我做了: public Loader onCreateLoader(int id,
我有以下内容解析器查询代码: String selection = Columns.NAME + "=? and " + Columns.AVAILABILITY + "=?"; String[] s
我正在尝试从数据库中选择一些数据,我有两段代码可以做到这一点: cursor = builder.query(db, new String[]{"col1",
正如Android文档所说,rawQuery方法的selectionArgs参数被解析为字符串。 SQLiteDatabase.rawQuery(String sql, String[] select
当我在查询中使用 selectionArgs 时,应用程序崩溃日志 12-30 22:22:05.406: ERROR/AndroidRuntime(532): FATAL EXCEPTION: ma
我有如下表格: 同学们: id | student_name ------------------ 1 | max 2 | alex 3 | james 我只想查询 ID
似乎 selectionArgs 没有正确绑定(bind),但我在这里找不到任何错误。 这将返回 2 个结果和那个是正确的 String sql = "SELECT * FROM tblEvent_e
我在 Android 上使用 SQLite。 我使用 ContentProvider 从数据库中查询数据。现在,当我尝试通过 ContentResolver 使用子查询时遇到问题 String sel
在 android 中,如果我像下面这样调用 SQLiteDatabase 方法查询: sqlitedb.query("mytable", null, "name = ?", new Str
如何在 SQLiteDatabase.query() 中使用 String[] selectionArgs?我希望我可以将它设置为 null,因为我没有用它。我只是想将整个未排序的表从数据库加载到 C
我想选择查询以从具有两个条件的一个表中检索数据我的代码是: Cursor res = mDatabase.rawQuery("select * from " + tableName + " where
我正在实现一个 ContentProvider,当我实现查询方法时,我遇到了一些困难。 public final Cursor query (Uri uri, String[] projection,
我在旧设备上使用非官方 API 从 Stock Google Calendar 获取事件。现在我正在重构代码以使用 android.content.ContentResolver.query() 的
我是一名优秀的程序员,十分优秀!