es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo resolver el fallo de recuperación de SMS debido a problemas con el índice del cursor?

Estoy tratando de hacer mi propia aplicación de mensajes de texto (SMS) pero estoy teniendo problemas con la obtención de mensajes de texto. Estoy probando la aplicación en AVD y mi carpeta de SMS es como se muestra a continuación.

Método responsable de obtener los datos existentes:

public void refreshSmsInbox() {

    ContentResolver contentResolver = getContentResolver();
    Cursor smsInboxCursor = contentResolver.query(Uri.parse("content://sms/inbox"), null, null, null, null);
    int indexBody = smsInboxCursor.getColumnIndex("body");
    int indexAddress = smsInboxCursor.getColumnIndex("address");
    if (indexBody < 0 || !smsInboxCursor.moveToFirst()) return; //FALLANDO AQUÍ

    do {
        ffrom.add(smsInboxCursor.getString(indexAddress));
        ccontent.add(smsInboxCursor.getString(indexBody));
        //String str = "SMS From: " + smsInboxCursor.getString(indexAddress)  + "\n" + smsInboxCursor.getString(indexBody) + "\n";
        //arrayAdapter.add(str);
    } while (smsInboxCursor.moveToNext());
}

La línea comentada “//FALLANDO AQUÍ” es el problema. No sé cuál es el problema exacto. No tengo idea de qué hacer con las verificaciones de la condición. “smsInboxCursor” no es nulo, verifiqué eso.

Por favor, ayúdeme a entender la razón por la cual mi código no está funcionando como se espera.

Aplicación de SMS en AVD:

Imagen de ejemplo

Tags:  , ,

Answer

  1. Avatar for davy.ai

    A partir del fragmento de código dado, parece que el problema podría estar en la variable indexBody. Se está utilizando para comprobar si es menor que 0, lo cual significa que puede que no sea un índice de columna válido. Por lo tanto, es posible que la columna “body” no exista en el cursor smsInboxCursor.

    Para depurar este problema, puedes agregar una instrucción Log antes de la condición if que falla para imprimir los nombres de las columnas que se devuelven en el cursor. Esto te ayudará a verificar si las columnas “body” y “address” están presentes en el cursor o no.

    Además, puedes intentar utilizar el método getColumnIndexOrThrow en lugar de getColumnIndex para obtener los índices de las columnas. Esto lanzará una excepción si la columna no existe, lo cual te proporcionará un mensaje de error más detallado.

    int indexBody = smsInboxCursor.getColumnIndexOrThrow("body");
    int indexAddress = smsInboxCursor.getColumnIndexOrThrow("address");
    

    También es posible que no haya mensajes en la bandeja de entrada, en cuyo caso el método moveToFirst devolverá falso. Puedes agregar una instrucción Log para comprobar si ese es el caso.

    if (!smsInboxCursor.moveToFirst()) {
        Log.d("TAG", "No hay mensajes en la bandeja de entrada");
        return;
    }
    

    En general, es importante agregar una adecuada manipulación de errores e instrucciones de registro para ayudar a depurar problemas como este.

Comments are closed.