Android:SMSコンテンツプロバイダーの「アドレス」列のnull文字列の問題
質問
コンテンツプロバイダーのSMSを読み取るAndroidアプリケーションに取り組んでいます。アプリケーションは正常に動作し、コンテンツプロバイダーからSMSを適切に読み取ります。しかし、ある時(非常にまれな)「アドレス」列は、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でこの問題を抱えています。お知らせ下さい。
アリ
解決
問題を見つけました。 Android OSは、SMSコンテンツプロバイダーのドラフトとしてメッセージを保存し、書き込みを開始してからSMSアプリを閉じます(着信またはその他の理由により)。これにより、「アドレス」列にnull値を持つSMSデータベースに新しいエントリが生成されます。
サルマン
他のヒント
これは通常の動作です。で見つかった smsmessageドキュメント:
このSMSメッセージの出発アドレス(送信者)を文字列形式またはnullを返します。
後でNPEのためにアプリが壊れる場合は、nullチェックを挿入して、アドレスを空の文字列に設定する必要があります。
アドバイス:質問が何かを尋ねる必要があります。エラーがある場合は、スタックトレースを提供する必要があります。
これは、マスクされた数の場合に発生する可能性があります。
所属していません StackOverflow