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 に答える