我有一个 listview ,可以显示设备上的联系人。我尝试做的是将我的设备从每个联系人收到的短信数量显示在我的列表视图中的文本视图中。我只能通过以下代码在收件箱中显示总条短信:
// gets total count of messages in inbox
String folder = "content://sms/inbox";
Uri mSmsQueryUri = Uri.parse(folder);
String columns[] = new String[] {"person", "address", "body", "date","status"};
String sortOrder = "date ASC";
Cursor c = context.getContentResolver().query(mSmsQueryUri, columns, null, null, sortOrder);
textview.setText(c.getCount());
上面代码的问题是,对于listview中的每一行,这只显示总数。如何将总数分配给它的相应联系人?
如果我的收件箱中有 100封邮件,最终结果是这样的: 联系人:
Foo Manchuu:25
Bar Bee:15
Sna Fuu:10John Doe:50
答案 0 :(得分:3)
Uri SMS_INBOX = Uri.parse("content://sms/conversations/");
Cursor c = getContentResolver().query(SMS_INBOX, null, null, null, null);
startManagingCursor(c);
String[] count = new String[c.getCount()];
String[] snippet = new String[c.getCount()];
String[] thread_id = new String[c.getCount()];
c.moveToFirst();
for (int i = 0; i < c.getCount(); i++) {
count[i] = c.getString(c.getColumnIndexOrThrow("msg_count"))
.toString();
thread_id[i] = c.getString(c.getColumnIndexOrThrow("thread_id"))
.toString();
snippet[i] = c.getString(c.getColumnIndexOrThrow("snippet"))
.toString();
Log.v("count", count[i]);
Log.v("thread", thread_id[i]);
Log.v("snippet", snippet[i]);
c.moveToNext();
}
查看日志并解决问题。不要重新发布相同的问题:How do I display the count of text messages received from a contact?
答案 1 :(得分:1)
我可能会将count(person) AS cnt
添加到columns
String数组中,然后我会将person
添加为groupBy
方法的query
参数。
修改强>
正如 Jens 所指出的,消息传递ContentProvider不支持GROUP BY
范例。
您可以做的是在应用程序启动时创建自己的内存数据库(http://www.sqlite.org/inmemorydb.html)以及从中感兴趣的复制粘贴(查询插入)消息系统消息传递数据库到您的内存数据库。 (注意!如果内存不足并且您有大量的消息感兴趣,这可能会出错)。既然你是内存数据库中的上帝,你可以根据自己喜欢的任何奇怪的SQL查询查询它...