1

我正在开发一个从内容提供商那里读取短信的 android 应用程序。该应用程序运行良好,并且可以从内容提供商处读取短信。但有时(非常罕见)“地址”列会为短信返回 null。

这是我正在使用的示例代码:

String whereClause = "_id > " + String.valueOf(Database.getLastSmsId(this));
        Cursor cursor = getContentResolver().query(smsUri, null, whereClause, null, null);
        if(cursor.moveToFirst()) {
            do {
                int id = cursor.getInt(cursor.getColumnIndex("_id"));
            String protocol = cursor.getString(cursor.getColumnIndex("protocol"));
            String body = cursor.getString(cursor.getColumnIndex("body"));

            String address = cursor.getString(cursor.getColumnIndex("address")); // <----- Here is the problem
            // address returns as null string

            String date = cursor.getString(cursor.getColumnIndex("date"));

                Log.d(Constants.TAG, "SMS event received. address="+address);
            } while(cursor.moveToNext());
    }

我在 Motorola Driod Android v2.3.5 上遇到了这个问题。请指教。

阿里

4

3 回答 3

2

我发现了问题。如果开始写入然后关闭 SMS 应用程序(由于来电或任何其他原因),Android 操作系统会将消息保存为 SMS 内容提供程序中的草稿。这将在 SMS 数据库中生成一个新条目,在“地址”列中具有空值。

萨尔曼

于 2012-01-16T18:34:31.587 回答
1

这是正常行为。在SmsMessage 文档中找到:

以 String 形式返回此 SMS 消息的原始地址(发件人),如果不可用,则返回 null

如果您的应用程序后来因为 NPE 而中断,您应该插入一个空检查并将地址设置为空字符串。

一个建议:一个问题应该问一些问题,如果你有错误,你应该提供一个堆栈跟踪。

于 2012-01-11T01:00:07.230 回答
0

这可能发生在屏蔽号码的情况下。

于 2013-02-06T17:57:50.387 回答