0

我正在使用具有 4 列(_id、名称、分数、状态)的数据库,并使用以下内容将所有行导入到 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").equals 它也不起作用

已尝试清理项目,但无法弄清楚这种行为。任何想法为什么会这样?!

更新:

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;
      }

我知道数据库创建工作正常,因为我有其他工作正常的表......

4

1 回答 1

0

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

于 2012-08-25T17:38:07.207 回答