Получение нулевого исключения при чтении окна отправки Android

У меня есть Assynctask, который прочитает весь контент в диалоговом окне, и он хорошо работает

protected String doInBackground(String... params) {
        Uri inboxURI = Uri.parse("content://sms/conversations");
        ContentResolver cr = getContentResolver();
        Cursor c = cr.query(inboxURI, null, null, null, null);
        c.moveToLast();

        al = new ArrayList<MessageInfo>();
        try{
        for (int i = c.getCount(); i > 0; i--) {

            MessageInfo mMessageInfo = new MessageInfo();
            mMessageInfo.MessageText = c.getString(c.getColumnIndexOrThrow("snippet"));
            mMessageInfo.ThreadId = c.getInt(c.getColumnIndex("thread_id"));

            Uri uri = Uri.parse("content://sms/inbox");
            String where = "thread_id=" + mMessageInfo.ThreadId;
            Cursor Cursor = getContentResolver().query(uri, null, where,null, null);
            startManagingCursor(Cursor);

            //Cursor.moveToFirst();
            String number = "";
            String name = "";


            if (Cursor.moveToFirst()) {

                number = Cursor.getString(Cursor.getColumnIndexOrThrow("address")).toString();
                name = GetNameAndNumber(Cursor, number, MessageBox.this);
                Log.i("checkPoint","checkPoint-1 "+name);
            } 
                else {
                uri = Uri.parse("content://sms/sent");
                where = "thread_id=" + mMessageInfo.ThreadId;
                Cursor = GetCursor(uri, where, MessageBox.this);

                if (Cursor.moveToFirst()) {
                    number = Cursor.getString(Cursor.getColumnIndexOrThrow("address")).toString();
                    name = GetNameAndNumber(Cursor, number, MessageBox.this);

                    Log.i("checkPoint","checkPoint-2 "+name);
                }Cursor.close();
            } 

            if (name.length() > 0) {
                mMessageInfo.Name = name;
            } else {
                mMessageInfo.Name = number;
            }
            mMessageInfo.Number = number;

            Log.i("name",name);
            Log.i("number",number);
            Log.i("mMessageInfo.ThreadId ",""+mMessageInfo.ThreadId );

            al.add(mMessageInfo);
            c.moveToPrevious();
        }c.close(); 
        }catch(Exception x){x.printStackTrace();}


        return "Executed"; 
    }

Но если мое приложение записывает в content: // sms / sent, приведенный выше код дает нулевое исключение, но стандартное приложение для обмена сообщениями может его хорошо читать.

Это метод, с помощью которого я обновляю отправленные товары

void sentBox(){
    ContentValues values = new ContentValues();

    values.put("address", number);
    values.put("body", msgBox.getText().toString());

    getContentResolver().insert(Uri.parse("content://sms/sent"), values);
    finish();
}

Чтобы быть конкретным, я не могу получить адрес сообщения в отправленных элементах ... ниже возвращается нулевое исключение ... Я думаю, что есть какое-то отношение к моему URI.

if (Cursor.moveToFirst()) 
                number = Cursor.getString(Cursor.getColumnIndexOrThrow("address")).toString();

Может ли кто-нибудь подсказать, почему он не может быть прочитан, если я напишу / обновлю свой отправленный ящик таким образом?


person mboy    schedule 25.06.2014    source источник


Ответы (1)


Мне удалось решить проблему. Это был еще один метод записи в отправленный ящик с использованием идентификатора сообщения, где есть другой метод записи в отправленный ящик с использованием адреса ..

protected String doInBackground(String... params) {

        al = new ArrayList<MessageInfo>();
        String number = "";
        String name = "";

        Uri conversationURI = Uri.parse("content://sms/conversations");
        ContentResolver cr = getContentResolver();
        Cursor c = cr.query(conversationURI, null, null, null, null);
        c.moveToLast();

        for (int i = c.getCount(); i > 0; i--) {

            MessageInfo mMessageInfo = new MessageInfo();
            mMessageInfo.MessageText = c.getString(c.getColumnIndexOrThrow("snippet"));
            mMessageInfo.ThreadId = c.getInt(c.getColumnIndex("thread_id"));

        try{    
            Uri message = Uri.parse("content://sms/inbox");
            ContentResolver cr_ = getContentResolver();
            String where_ = "thread_id=" + mMessageInfo.ThreadId;

            Cursor c_ = cr_.query(message, null, where_, null, null);
            startManagingCursor(c_);

            if (c_.moveToFirst() && c_ != null) {
                number = c_.getString(c_.getColumnIndexOrThrow("address"));
                name = GetNameAndNumber(c_, number, MessageBox.this);

            }else{
                Uri _message_ = Uri.parse("content://sms/sent");
                ContentResolver _cr_ = getContentResolver();
                String _where_ = "thread_id=" + mMessageInfo.ThreadId;
                Cursor _c_ = _cr_.query(_message_, null, _where_, null, null);

                if (_c_.moveToFirst() && _c_ != null) {
                    number = _c_.getString(_c_.getColumnIndexOrThrow("address"));
                    name = GetNameAndNumber(_c_, reformatNumber(number), MessageBox.this);
                }
            }

            }catch(Exception x){x.printStackTrace();}

            if (name.length() > 0) {
                mMessageInfo.Name = name;
            } else {
                mMessageInfo.Name = number;
            }
            mMessageInfo.Number = number;

            al.add(mMessageInfo);
            c.moveToPrevious();
        }c.close(); 
        return null; 
    }

Изменил это ОТ:

    void sentBox(){
    ContentValues values = new ContentValues();
    values.put("thread_id", getIntent().getExtras().getInt("ID"));
    values.put("body", mMessageEditText.getText().toString());
    getContentResolver().insert(Uri.parse("content://sms/sent"), values);

}

TO:

    void sentBox(){
    ContentValues values = new ContentValues();
    values.put("address", getIntent().getExtras().getString("number"));
    values.put("body", mMessageEditText.getText().toString());
    }
person mboy    schedule 25.06.2014