Android读取SMS收件箱为某些字段返回null和0

时间:2016-01-14 03:21:23

标签: android sms android-contentprovider

我想阅读短信收件箱,该应用程序能够获取邮件,但它会返回一些意外的身体部位结果。以下是不需要的输出的屏幕截图。 +产生它的代码。

//function to read the SMS inbox
    public void fetchSMS() {
        Uri uriSMSUri = Uri.parse("content://sms/inbox");
        Cursor c = getContentResolver().query(uriSMSUri, null, null, null, null);
        String sms = "";

        while (c.moveToNext()){
            sms += "From :" + c.getString(2) + " : " + c.getString(11)+"\n";
        }
        txtViewSMS.setText(sms);
    }

输出截图 null-for-body-fields

zero-for-body-field

请帮助

1 个答案:

答案 0 :(得分:1)

您看起来"body"列的索引错误了。您应该避免使用硬编码索引,而是使用Cursor#getColumnIndex()方法。例如:

sms += "From :" + c.getString(c.getColumnIndex("address")) +
    " : " + c.getString(c.getColumnIndex("body")) + "\n";

此外,由于您正在拉动整个收件箱,这可能会变得相当大,因此有助于优化您的方法。

public void fetchSMS() {
    final Uri uriSMSUri = Uri.parse("content://sms/inbox");
    final Cursor c = getContentResolver().query(uriSMSUri, null, null, null, null);

    if (c != null && c.moveToFirst()) {
        final StringBuilder sb = new StringBuilder();
        final int addressIndex = c.getColumnIndex("address");
        final int bodyIndex = c.getColumnIndex("body");

        do {
            sb.append("From :")
                .append(c.getString(addressIndex))
                .append(" : ")
                .append(c.getString(bodyIndex))
                .append("\n");
        } while (c.moveToNext());

        txtViewSMS.setText(sb.toString());
    }
}