2

我有一个在我的设备上显示联系人的列表视图。我想要做的是将我的设备从每个联系人收到的短信数量显示到我的列表视图中的文本视图中。我只能通过以下代码显示收件箱中的短信总数:

        // 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());

上面代码的问题是,对于我的列表视图中的每一行,这只显示总数。如何将总数拆分为其对应的联系人?

如果我的收件箱中有 100 条消息,最终结果是这样的:

富满洲:25

酒吧蜜蜂:15

新风:10

约翰·多伊:50

4

2 回答 2

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();
    }

查看日志并解决问题。不要转发相同的问题:如何显示从联系人收到的短信数量?

于 2012-05-15T02:49:29.030 回答
1

我可能会添加count(person) AS cntcolumnsString 数组,然后我会添加person作为方法的groupBy参数query

编辑:

正如Jens所指出的GROUP BY,消息传递 ContentProvider 不支持该范例。

您可以做的是在应用程序启动时创建自己的内存数据库(http://www.sqlite.org/inmemorydb.html)并从系统消息传递数据库中复制粘贴(查询插入)感兴趣的消息到您的内存数据库中。(注意!如果您的内存不足并且有大量您感兴趣的消息,这可能会出错)。由于您将成为内存数据库中的上帝,因此您可以根据自己的喜好查询它,并使用您想要的任何奇异 SQL 查询...

于 2012-05-14T09:17:41.687 回答