我正在开发一个从内容提供商处读取短信的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上遇到此问题。请指教。
阿里
答案 0 :(得分:2)
我发现了问题。 如果开始编写然后关闭SMS应用程序(由于来电或任何其他原因),android OS将消息保存为SMS内容提供商中的草稿。这将在SMS数据库中生成一个新条目,并在“地址”列中显示空值。
萨勒曼
答案 1 :(得分:1)
这是正常行为。找到SmsMessage documentation:
以字符串形式返回此SMS消息的原始地址(发件人) 如果不可用,则为form或null
如果你的应用程序因为NPE而中断,你应该插入空检查并将地址设置为空字符串。
建议:如果您遇到错误,应该问一些问题并提供堆栈跟踪。
答案 2 :(得分:0)
如果屏蔽号码,可能会发生这种情况。