2013-01-21 101 views
0

我试图检索我的数据库中的人的名字。目前我得到一个越界的错误。Android游标越界异常索引0

我知道数据存在,即时尝试检索,因为我有一个列表视图,显示数据库中的所有数据。

IF ELSE检查:

NameAppointPass.open(); 
    String nameReturned = NameAppointPass.getName(sentID); 
    if(nameReturned != "") 
    { 
     Dialog d = new Dialog(this); 
     d.setTitle("returned"); 
     TextView txt = new TextView(this); 
     txt.setText("win"); 
     d.setContentView(txt); 
     d.show(); 
    } 
    else 
    { 
     Dialog d = new Dialog(this); 
     d.setTitle("empty"); 
     TextView txt = new TextView(this); 
     txt.setText("Fail"); 
     d.setContentView(txt); 
     d.show(); 
    } 

希望有人可以看到我要去哪里错了。

目前,我发现了以下错误:

01-21 21:41:43.753: E/AndroidRuntime(276): FATAL EXCEPTION: main 
01-21 21:41:43.753: E/AndroidRuntime(276): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.flybase2/com.example.flybase2.addAppointment}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 

我使用的onclick“长变量”,如图送我从列表视图想要的数据的ID:

public void onListItemClick(ListView list, View v, int list_posistion, long item_id) 
{ 

    long idToPass = item_id; 

    Intent setName = new Intent("com.example.flybase2.addAppointment"); 
    setName.putExtra("newPassedID", idToPass); 
    startActivity(setName); 
} 

然后通过绑定将其发送到对象实例'NameAppointPass',如下所示:

NameAppointPass.open(); 
String nameReturned = NameAppointPass.getName(sentID); 

Th Ë下面的代码显示getName该查询的数据库的方法,并应返回存储在所选择的ID名称,而是我得到的错误:

public String getName(long passedID) { 

     String [] columns = new String[]{KEY_ROWAPPID, KEY_NAMEAPP, KEY_TYPEAPP, KEY_TIMEAPP, KEY_DATEAPP, KEY_COMMENTAPP}; 
     Cursor c = ourDatabase.query(DATABASE_TABLEAPP, columns, KEY_ROWAPPID + "=" + passedID, null, null, null, null); 
     if(c != null) 
     { 
     c.moveToFirst(); 
     String name = c.getString(1); 
     return name; 
     } 

     return null; 
    } 

回答

2

如果光标可以是空的,你可以检查光标没有数据:

 if(c != null && c.getCount() > 0) 

为了进一步诊断为什么光标在不同的地方清空放置日志语句来检查,如果该项目ID仍然是正确的。

+0

+1,正如你所说'if(c!= null)'不检查游标是否为_empty_。 – Sam

+0

@Sam我在返回的String Sam上添加了'IF ELSE'检查。 (如我编辑和显示在我原来的问题)。如果我添加检查以确保行已经返回(即像Henrry所述),但没有计数检查它仍然崩溃,程序不会再崩溃!此外,'IF'声明返回true,表明'nameReturned'不等于没有结果。目前非常困惑! - – user1352057

+0

@ user1352057根本问题是没有行,其中'KEY_ROWAPPID +“=”+ passedID' ...仔细检查“passedID”的值。 – Sam

0

管理得到这个排序。最后,我错误地命名了我的变量来保存传入的ID。