android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

匿名 (未验证) 提交于 2019-12-03 01:25:01

问题:

I am using custom adapter extending cursor adapter for displaying data in listview, to display particular phone number i have passed the id to a method in database class but it is showing

errorandroid.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0  

while placing debugger in the the method it is not going after the line

num = cursor.getString(cursor.getColumnIndex("ContactNumber")); 

Can any one help me to solve it. This is the code:

public String getNumberFromId(int id)  {     String num;     db= this.getReadableDatabase();     Cursor cursor = db.query(scheduletable, new String[] { "ContactNumber" },"_id="+id, null, null, null, null);     cursor.moveToFirst();     num = cursor.getString(cursor.getColumnIndex("ContactNumber"));      cursor.close();     db.close();     return num; } 

回答1:

Whenever you are dealing with Cursors, ALWAYS check for null and check for moveToFirst() without fail.

if( cursor != null && cursor.moveToFirst() ){     num = cursor.getString(cursor.getColumnIndex("ContactNumber"));     cursor.close();  } 

Place logs appropriately to see whether it is returning null or an empty cursor. According to that check your query.

Update Put both the checks in a single statement as mentioned by Jon in the comment below.

Update 2 Put the close() call within the valid cursor scope.



回答2:

try this.. this will avoid an Exception being thrown when the cursor is empty..

if(cursor != null && cursor.moveToFirst()){     num = cursor.getString(cursor.getColumnIndex("ContactNumber"));      cursor.close(); } 


回答3:

First check this Condition before fetching data

if(cursor!=null && cursor.getCount()>0){   cursor.moveToFirst();   num = cursor.getString(cursor.getColumnIndex("ContactNumber"));  } 


回答4:

Check the return value from moveToFirst(), before you try to read anything from the cursor. It looks as if no results are being returned.



回答5:

a save schema to query Cursors is

// just one Cursor cursor = db.query(...); if (cursor != null) {     if (cursor.moveToFirst()) {         value = cursor.getSomething();     }     cursor.close(); }  // multiple columns Cursor cursor = db.query(...); if (cursor != null) {     while (cursor.moveToNext()) {         values.add(cursor.getSomething());     }     cursor.close(); } 


回答6:

In case people are still looking:

Instead of searching for "ContactNumber" try searching for Phone.NUMBER. The tutorial has the code with more details: http://developer.android.com/training/basics/intents/result.html



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!