2012-08-25 23 views
0

我正在处理一个有4列(_id,名称,分数,状态)的数据库,并使用以下命令将所有行导入到arrayList中。不寻常的android getString和等于行为

Cursor assessmentStatus = myDbHelper.getAllTests(); 

     assessmentStatus.moveToFirst(); 

     while (!assessmentStatus.isAfterLast()) { 

      allAssessments.add(assessmentStatus.getString(1)); 

      if(assessmentStatus.getString(3).equals("locked")) { lockedAssessments.add(assessmentStatus.getString(1)); } 

      assessmentStatus.moveToNext(); 
     } 

     assessmentStatus.close(); 

第一条语句(allAssessments.add ...)正常工作。 if语句如果使用getString(0).equals或getString(1).equals,但如果我使用getString 3或4 - 应用程序崩溃,则不起作用。如果我使用getColumnIndex(“status”),它也不起作用。等于

已经尝试清理项目,但无法弄清楚这种行为。任何想法为什么发生这种情况?!

UPDATE:

1)getAllTests如下(也试图rawQuery SELECT * FROM ...等

public Cursor getAllTests() 
{ 
    return myDataBase.query("assessment_tests", new String[] {"_id", "name", "scores", "status"}, null, null, null, null, null); 
} 

2)所有字段是文本字段。卸载,清理项目并重新安装不起作用。

3)打开数据库有:

  DataBaseHelper myDbHelper = new DataBaseHelper(null); 
     myDbHelper = new DataBaseHelper(this); 

     try { 
     myDbHelper.openDataBase(); 
     }catch(SQLException sqle){ 
     throw sqle; 
     } 

我知道数据库的创建工作得很好,因为我有一个完美工作的其他表...

+0

能否请您添加并显示错误消息堆栈跟踪拉分贝? – micha

+0

可你也张贴相关数据库创建的代码和功能getAllTests代码 – nandeesh

+0

上述更新 - 感谢 – cg5572

回答

0

验证,如果数据库字段的类型文本。如果是这种情况,请从设备上卸载应用程序并再次运行以强制更新数据库。 如果您的设备是root用户,您可以尝试拔出数据库。 分贝是/data/data/com.yourapp.name/databases/dbname (如果default),你可以使用"adb pull /data/data/com.yourapp.name/databases/dbname"

+0

你可以得到你的数据库没有根。 –

+0

不适用于所有手机。 – IchBinKeinBaum