Android: пустая строка в столбце «address» для провайдера sms-контента - PullRequest
1 голос
/ 11 января 2012

Я работаю над приложением для Android, которое читает смс от контент-провайдера. Приложение отлично работает и отлично читает смс от контент-провайдера. Но иногда (очень редко) столбец address возвращает null для сообщения sms.

Вот пример кода, который я использую:

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. Пожалуйста, сообщите.

Али

Ответы [ 3 ]

2 голосов
/ 16 января 2012

Я нашел проблему.ОС Android сохраняет сообщение как черновик в поставщике содержимого SMS, если начинает писать, а затем закрывает приложение SMS (из-за входящего вызова или по любой другой причине).Это создает новую запись в базе данных SMS с нулевым значением в столбце «адрес».

Salman

1 голос
/ 11 января 2012

Это нормальное поведение.Найдена в документации SmsMessage :

Возвращает исходный адрес (отправителя) этого SMS-сообщения в виде строки или ноль, если он недоступен

Если вашприложение разрывается из-за NPE позже, вы должны вставить нулевую проверку и установить адрес в пустую строку.

Совет: Вопрос должен быть задан, и вы должны предоставить трассировку стека, если у вас есть ошибка.

0 голосов
/ 06 февраля 2013

Это может произойти в случае маскированного номера.

...