Android: NULL -String -Problem für die Spalte "Adresse" für SMS -Inhaltsanbieter
Frage
Ich arbeite an einer Android -Anwendung, die die SMS vom Inhaltsanbieter liest. Die Anwendung funktioniert einwandfrei und liest SMS gut vom Inhaltsanbieter. Aber irgendwann (sehr selten) gibt die Spalte "Adresse" NULL für die SMS -Nachricht zurück.
Hier ist Beispielcode, was ich verwende:
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());
}
Ich bekomme dieses Problem in Motorola Draiod Android V2.3.5. Bitte beraten.
Ali
Lösung
Ich fand das Problem. Das Android -Betriebssystem speichert die Nachricht als Entwurf im SMS -Inhaltsanbieter, wenn Sie die SMS -App (aufgrund eines eingehenden Anrufs oder anderer Gründe) beginnen und dann schließen). Dies generiert einen neuen Eintrag in der SMS -Datenbank mit Nullwert in der Spalte "Adresse".
Salman
Andere Tipps
Dies ist ein normales Verhalten. Gefunden in der SMSMessage -Dokumentation:
Gibt die Ursprungsadresse (Absender) dieser SMS -Nachricht in Zeichenfolgenform oder Null zurück, falls nicht verfügbar
Wenn Ihre App aufgrund eines NPE später bricht, sollten Sie eine Null -Prüfung einfügen und die Adresse in eine leere Zeichenfolge einstellen.
Ein Rat: Eine Frage sollte etwas gestellt und Sie sollten eine Stapelspur angeben, wenn Sie einen Fehler haben.
Dies kann bei maskierter Nummer passieren.