我正在使用包含4列(_id,name,scores,status)的数据库,并使用以下命令将所有行导入到arrayList中。
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 ...)工作正常。如果我使用getString(0).equals或getString(1).equals,则if语句有效,但如果我使用getString 3或4则不会 - 应用程序崩溃。如果我使用getColumnIndex(“status”),它也将无法工作.qualals
尝试过清理项目,但无法弄清楚这种行为。任何想法为什么会发生这种情况?!
更新
1)getAllTests如下(还尝试了rawQuery SELECT * FROM ... etc
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 :(得分:0)
验证数据库字段是否为文本类型。从设备卸载应用程序并再次运行以强制更新数据库(如果是这种情况)。
如果您的设备是root用户,您可以尝试拔出数据库。
default
上的数据库是{/data/data/com.yourapp.name/databases/dbname
}
您可以使用"adb pull /data/data/com.yourapp.name/databases/dbname"