Android: NULL String Problema para la columna 'Dirección' para el proveedor de contenido de SMS
Pregunta
Estoy trabajando en una aplicación de Android que lee el SMS del proveedor de contenido. La aplicación funciona bien y lee SMS Fine del proveedor de contenido. Pero en algún momento (muy raro) la columna 'Dirección' devuelve NULL para el mensaje SMS.
Aquí está el código de muestra lo que estoy usando:
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());
}
Estoy obteniendo este problema en Motorola diod Android v2.3.5. Por favor avise.
Ali
Solución
Encontré el problema. El sistema operativo Android guarda el mensaje como borrador en el proveedor de contenido SMS, si comienza a escribir y luego cierre la aplicación SMS (debido a una llamada entrante o cualquier otro motivo). Esto genera una nueva entrada en la base de datos SMS con un valor nulo en la columna 'Dirección'.
Salman
Otros consejos
Este es un comportamiento normal. Encontrado en el Documentación de smsmessage:
Devuelve la dirección de origen (remitente) de este mensaje SMS en forma de cadena o nulo si no está disponible
Si su aplicación se rompe debido a un NPE más tarde, debe insertar una verificación nula y establecer la dirección en una cadena vacía.
Un consejo: una pregunta debe hacer algo y debe proporcionar un rastro de pila si tiene un error.
Esto puede suceder en caso de número enmascarado.