Android:sms内容提供商的“地址”列的空字符串问题

时间:2012-01-11 00:52:57

标签: android sms motorola

我正在开发一个从内容提供商处读取短信的Android应用程序。该应用程序工作正常,从内容提供商读取短信。但有时(非常罕见)的地址'列为sms消息返回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上遇到此问题。请指教。

阿里

3 个答案:

答案 0 :(得分:2)

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

萨勒曼

答案 1 :(得分:1)

这是正常行为。找到SmsMessage documentation

  

以字符串形式返回此SMS消息的原始地址(发件人)   如果不可用,则为form或null

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

建议:如果您遇到错误,应该问一些问题并提供堆栈跟踪。

答案 2 :(得分:0)

如果屏蔽号码,可能会发生这种情况。