如何使用选择参数从 android 中的 contentprovider 查询特定行

2024-01-11

我已经构建了一个基本的内容提供程序,用于存储用于学习目的的 SMS 消息,到目前为止我可以读取(无需选择参数)、插入、更新和删除。

然而,我一直在尝试弄清楚如何格式化我的提供程序中 WHERE 子句的选择参数:

基本上我的应用程序需要搜索特定的时间戳(长格式)并返回其 _id

假设您的数据库有一个您尝试访问的条目:

2|1|1410293471300|测试类型 1||测试|0

整个数据库如下所示:

_id|CLIENTTRXID|CREATED_AT|类型|MESSAGEPRIO|消息|已接受

1|1|1410293471000|测试类型 1||测试|0

2|1|1410293471300|测试类型 1||测试|0

3|1|1410293471600|测试类型 1||测试|0

在 sql 中,查询将是 “从警报中选择 _id,其中 CREATED_AT=1410293471300;”

我希望的代码可以做同样的事情:

//normally i would get the string dynamically but to make it equal to the sql
String date = "1410293471300";
String[] selectionArgs = new String[]{ date };

Cursor cursor = getContext().getContentResolver().query(AlertContract.CONTENT_URI, null, AlertContract.Column.CREATED_AT, selectionArgs, AlertContract.DEFAULT_SORT);

无论我尝试作为选择参数,似乎总是会产生以下错误

Exception caught﹕ Cannot bind argument at index 1 because the index is out of range.  The statement has 0 parameters.

这是我的 contentprovider 的查询方法:

    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
    qb.setTables( AlertContract.TABLE);

    switch (sURIMatcher.match(uri)) {
        case AlertContract.STATUS_DIR:
            break;
        case AlertContract.STATUS_ITEM:
            qb.appendWhere(AlertContract.Column.ID + "=" + uri.getLastPathSegment());
            break;
        default:
            throw new IllegalArgumentException( "illegal uri: " + uri);
    }
    String orderBy = (TextUtils.isEmpty(sortOrder)) ? AlertContract.DEFAULT_SORT : sortOrder;
    SQLiteDatabase db = dbHelper.getReadableDatabase();
    Cursor cursor = qb.query(db, projection, selection, selectionArgs, null, null, orderBy);

    //register for uri changes
    cursor.setNotificationUri(getContext().getContentResolver(), uri);

    Log.d(TAG, "queried records: "+cursor.getCount());
    return cursor;
}

想必我错过了一些非常明显的东西,并且会因为发布这个问题而感到很愚蠢。

但目前我非常感谢任何帮助,因为我很困惑。


看起来你的问题出在你的身上selection,而不是与你的selectionArgs本身。这selection应该是“where”之后的整个查询。在这里你的selection is "CREATED_AT"。您还需要两个项目才能使其正常工作:

  1. an =,因为你想要相等(当然你也可以做其他运算符)
  2. a ?。这是您的选择参数将被插入的位置(每个参数需要一个?在选择时,应该有相同的数量?在选择中作为选择参数。

最终结果应该更像是"CREATED_AT = ?"

查看文档 http://developer.android.com/reference/android/content/ContentProvider.html#query(android.net.Uri,%20java.lang.String%5B%5D,%20java.lang.String,%20java.lang.String%5B%5D,%20java.lang.String) and 本教程 http://www.vogella.com/tutorials/AndroidSQLite/article.html有关如何正确构建 ContentProvider 查询的更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用选择参数从 android 中的 contentprovider 查询特定行 的相关文章

随机推荐

  • 我如何可以为 UINavigationBar 而不是 UITabBar 的条色调颜色变化设置动画?

    我正在我的应用程序中实现一个主题 但遇到了一个奇怪的错误 功能 由于某些奇怪的原因 我无法使用UIView animate在我的自定义 UITabBarController 类中 对 UITabBar 的颜色变化进行动画处理 但相同的代码在
  • MySQL 在一个查询中获取 Mindate 和 Maxdate

    如何仅使用一个sql查询获取mysql中的最大日期和最小日期 SELECT MIN date col MAX date col FROM table name
  • 持有多个锁的线程进入 wait() 状态。它会释放所有持有锁吗?

    我编写了这个程序来检查线程 t1 是否持有两个不同对象的锁 Lock class 和 MyThread class 使用 MyThread class wait 在 MyThread class 实例上进入等待模式 它不会释放 Lock c
  • 使用 v4 Fragments API 实现 ActionBar 选项卡

    我的应用程序当前使用 Fragments v4 兼容性包来支持 Android 版本一直到 1 6 这意味着我的所有片段都继承自兼容包的版本Fragment 我目前正在尝试重新设计应用程序的部分内容以利用 Honeycomb 功能 例如Ac
  • 使用 Kendo Grid 获取数据时日期格式发生变化

    我正在尝试使用一些参数获取数据并将其加载到剑道网格中 但是当我使用日期参数时 日期格式正在改变 因此在服务器端显示错误的日期 作为我使用的参数的示例 new Date April 01 2016 但在服务器端它变成 04 01 2016 这
  • Internet Explorer toDataURL() 替代方案?

    所以我需要保存在a上绘制的图像数据
  • C libm.a 编译时不需要链接

    我试图编译一个源文件 其中包括
  • RegEx:如果lookbehind显示小写,则删除换行符

    我正在 Notepad 中执行 CTRL H 查找和替换 我想找到所有换行符后跟小写字符 以便用空格字符替换它们 从而删除文本中不需要的换行符 Find r n A Z 0 9 代替 在此插入空格字符 确保您选择了 相符 and 正则表达式
  • boost是如何实现信号和槽的?

    要继续另一个问题 我们问这个 Boost是如何实现信号 槽机制的 See 信号和槽是如何在底层实现的 https stackoverflow com questions 1406940 how signal and slots are im
  • 什么是快照构建/源版本?

    什么是快照构建 源版本 具体到 JDK 7 快照版本供用户在平台仍在开发时下载和查看 http www oracle com technetwork java javase downloads ea jsp 142245 html http
  • R 以相似字符串开头的不同列组的行总和

    我对 R 还很陌生 这是我第一次敢在这里提问 我正在使用具有李克特量表的数据集 并且我想对不同组的列进行求和 这些列共享其名称中的第一个字符串 下面我构建了一个只有 2 行的数据框来说明我遵循的方法 尽管我希望收到有关如何编写更有效的方法的
  • Ajax 传递空值但控制器在 ASP.NET MVC 中获取 null

    我正在与ASP NET MVC并且发送的值有问题Ajax到我的控制器 假设我有SampleViewModel像这样 public class SampleViewModel private string firstName string E
  • Conda:将本地开发包安装到单个 conda 环境中

    如果我使用 virtualenv 我将激活项目的虚拟环境 然后安装我正在开发模式下开发的包 像下面这样 workon superbad pip install e fnawesome 这允许我的包裹fnawesome可以通过我的中的任何代码
  • C++中多重继承的限制

    C 中多重继承的限制是什么 即一个类可以继承多少个类 它是否依赖于实现 或者对多重继承中可以继承的类的数量是否有限制 它是实现定义的 C 11 给出了推荐的最小值实施数量标准部分 直接和间接基类 16 384 单个类的直接基类 1 024
  • JavaScript。无法在 safari 中打开新标签

    以下 JavaScript 可以在 Firefox Chrome 和 IE 中打开一个新选项卡 但它会在 Safari 中打开一个新窗口 javascript window open url blank opens new window i
  • Maven 插件自动生成 setter/getter?

    是否有一个 Maven 插件可以自动生成具有相应 JavaDocs 的 setter 和 getter 我知道 Eclipse Netbeans 会在您告诉它时执行此操作 然而 源代码最好只包含框架并让 Maven 或其他工具生成重复的内容
  • 如何在 Bash 中对数组进行排序

    我在 Bash 中有一个数组 例如 array a c b f 3 5 我需要对数组进行排序 不仅仅是以排序的方式显示内容 而是获取包含排序后的元素的新数组 新的排序数组可以是全新的 也可以是旧的 您实际上并不需要那么多代码 IFS n s
  • jQuery 注释/取消注释

    我正在寻找一种使用 jQuery 将元素包装到注释中的方法 例如 还有一种删除评论的方法 这可能吗 要使用注释包装元素 或者更具体地说 用具有该元素 HTML 的注释节点替换元素 my element jq my element comme
  • 为什么 Chrome 和 FireFox 控制台打印“未定义”?

    获取这个简单的测试对象并将其粘贴到控制台中 你会看到它说undefined 该对象正在工作 因为它还打印123 但是什么是undefined about Test var Test new function return get testi
  • 如何使用选择参数从 android 中的 contentprovider 查询特定行

    我已经构建了一个基本的内容提供程序 用于存储用于学习目的的 SMS 消息 到目前为止我可以读取 无需选择参数 插入 更新和删除 然而 我一直在尝试弄清楚如何格式化我的提供程序中 WHERE 子句的选择参数 基本上我的应用程序需要搜索特定的时