1

受信トレイでSMSを検索すると、「インデックス0が要求されました:サイズ0」のエラーが発生します。次のコードを記述しましたcursor index out of bounds

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub              
            Cursor cursor = getContentResolver().query(Uri.parse("content://sms/inbox"), null, null, null, null);
            cursor.moveToFirst();
            do{

               String msgData = "";
               for(int idx=0;idx<cursor.getColumnCount();idx++)
               {
                   msgData += " " + cursor.getColumnName(idx) + ":" + cursor.getString(idx);
                   Toast.makeText(getApplicationContext(), msgData, Toast.LENGTH_LONG).show();
               }
            }while(cursor.moveToNext());
        }
    });  
 }
4

4 に答える 4

1
Cursor cursor = getContentResolver().query(Uri.parse("content://sms/inbox"), null, null, null, null);
       if ( cursor.getCount() > 0 )
          for(int i=0;i<cursor.getCount();i++)
          {
              cursor.moveToPosition(i);

           String msgData = "";
           for(int idx=0;idx<cursor.getColumnCount();idx++)
           {
               msgData += " " + cursor.getColumnName(idx) + ":" + cursor.getString(idx);
               Toast.makeText(getApplicationContext(), msgData, Toast.LENGTH_LONG).show();
           }

        }else
           Toast.makeText(getApplicationContext(), "No message was found in device", Toast.LENGTH_SHORT).show();
于 2013-02-22T06:33:02.537 に答える
1

Cursor でメソッドを呼び出す前に、クエリが結果を返すことを確認する必要があります。をチェックすることでこれを行うことができますcursor.getCount() > 0

于 2013-02-22T06:31:25.157 に答える
1

の戻り値を確認するcursor.moveToFirst()か、単に確認する必要がありますcursor.getCount()

于 2013-02-22T06:31:37.080 に答える
1

次のように、cursor.moveToNext() を確認してください。

if(cursor.moveToNext())
{
    while(!cursor.isAfterLast())
    {
         //do your job.
         cursor.moveToNext();
    }
}

do while ループを使用していて、カーソルに行があるかどうかをチェックしていないため、問題が発生します。

于 2013-02-22T06:40:27.850 に答える