Android获取下一批短信/毫秒

时间:2015-03-16 15:10:36

标签: android android-sqlite android-contentresolver

我需要从Android中的数据库中检索接下来的20条消息。我正在使用以下代码检索前20条消息:

Uri provider = Uri.parse("content://mms-sms/conversations/" + threadId);
Cursor cursor = contentResolver.query(provider, new String[]{"_id", "ct_t"}, null, null, 
"_id desc limit 20");
//then used the id to get the actual message

这很好用。但我需要从最后一个线程ID和下面开始接收下20条消息。我试图添加选择:

"_id < lastMessageId"

但这给了我一个空游标。我想到的另一个解决方案是使用上面相同的代码,但将限制增加20,但这将返回不必要的数据行。有人可以帮我这个吗?谢谢!

编辑: 我在日志中找到了这个。

SQLiteException: (ambiguous column name: _id (code 1): , while compiling: SELECT _id, ct_t FROM (SELECT DISTINCT date * 1 AS normalized_date, _id, NULL AS ct_t FROM sms WHERE (_id < ? AND thread_id = 25 AND (type != 3)) UNION SELECT DISTINCT date * 1000 AS normalized_date, pdu._id, ct_t FROM pdu LEFT JOIN pending_msgs ON pdu._id = pending_msgs.msg_id WHERE (_id < ? AND thread_id = 25 AND msg_box != 3 AND (msg_box != 3 AND (m_type = 128 OR m_type = 132 OR m_type = 130))) UNION SELECT DISTINCT date * 1 AS normalized_date, _id, NULL AS ct_t FROM cellbroadcast WHERE (_id < ? AND thread_id = 25) ORDER BY _id desc limit 20) ORDER BY _id desc limit 20)

有什么方法我只能在sms表上添加where子句吗?

1 个答案:

答案 0 :(得分:0)

光标不应该为null,就好像查询没有返回结果一样,它的大小(cursor.getCount())将为0.

请务必正确使用选择和selectionArgs - 选择==&gt; &#34; _id&lt; ?&#34;和 selectionArgs ==&gt;串[] {lastThreadId.toString()}

如果lastThreadId是Integer,或者如果它是一个int,你可以使用String.valueOf(lastThreadId)将它包装成一个String。

此外,您可以使用&#34; _id&lt; &#34; + lastThreadId.toString()作为您的选择语句,其中selectionArgs为null。