Android:SMSコンテンツプロバイダーの「アドレス」列のnull文字列の問題

StackOverflow https://stackoverflow.com/questions/8812763

  •  26-10-2019
  •  | 
  •  

質問

コンテンツプロバイダーの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チェックを挿入して、アドレスを空の文字列に設定する必要があります。

アドバイス:質問が何かを尋ねる必要があります。エラーがある場合は、スタックトレースを提供する必要があります。

これは、マスクされた数の場合に発生する可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top