Android内容解析器查询占位符整数

时间:2015-03-02 19:02:26

标签: android arguments selection

我正在尝试在Android浏览器内容提供程序上运行一个简单的查询。书签与历史项目混合在一起,因此要获得书签,只需要选择" Browser.BookmarkColumns.BOOKMARK = 1"。使用

String mSelectionClause = Browser.BookmarkColumns.BOOKMARK + " = 1";

Cursor cursor = getContentResolver().query(Browser.BOOKMARKS_URI, null, mSelectionClause, null, null);

工作正常。但是我用占位符获得相同结果的所有尝试都失败了:

String mSelectionClause = Browser.BookmarkColumns.BOOKMARK + " = ?";

查询:

Cursor cursor = getContentResolver().query(Browser.BOOKMARKS_URI, null, mSelectionClause, mSelectinArgs, null);
在所有这些情况下,

返回一个空的Cursor:

mSelectionArgs[0] = "1"
mSelectionArgs[0] = '1'
mSelectionArgs[0] = String.valueOf(1)
mSelectionArgs[0] = Integer.toString(1)
mSelectionArgs[0] = 1 + "" (idea picked up on this site)

我做错了什么或者我是否应该放弃使用占位符的希望?

干杯。

1 个答案:

答案 0 :(得分:4)

Android数据库API是为字符串而不是整数而设计的。有些人说这是API设计中的一个错误。

无论如何,在您的示例String mSelectionClause = Browser.BookmarkColumns.BOOKMARK + " = 1";中,您使用的是整数(= 1)。这是处理整数的最佳和唯一方法。这样做也是安全的。如果你要使用字符串,你的第二个解决方案将是最安全的。