2013-02-22 116 views
1

我得到cursor index out of bounds“索引0要求:大小为0”错误,当我搜索在inbox.I短信已经写了下面的代码:光标索引越界“索引0要求:大小为0”

 @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()); 
     } 
    }); 
} 
+0

哪一行导致错误? – 2013-02-22 06:29:50

回答

1

您需要在调用Cursor中的任何方法之前检查您的查询是否返回结果。你可以通过检查cursor.getCount() > 0来做到这一点。

+0

短信存在于模拟器收件箱中仍然会出现异常 – user2098267 2013-02-22 08:00:53

+0

@ user2098267然后,您的查询出现问题。 – 2013-02-22 23:58:17

1

您应该检查的cursor.moveToFirst()返回值,或者简单地检查cursor.getCount()

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(); 
1

您只需查看cursor.moveToNext()如下:

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

问题引起,因为你使用做是而循环甚至不检查游标是否有任何行

相关问题