2011-12-17 7 views
2

このエラーメッセージは修正できません。 私はカーソルを正しく閉じます。私は別の参照名で新しいカーソルを作成しようとしました..しかし、これはあまりにも仕事..私は間違って何をするのですか?アンドロイドは、非アクティブ化またはクローズされていないカーソルを確定します。

12-17 10:09:14.107:E /カーソル(277):非アクティブ化またはクローズされていないカーソルのファイナライズ。 database = /data/data/com.lernapp.src/databases/LernApp、table = Answers、query = SELECT答え、正しいFROMアンサーWhere Test Id =?とTestPageId =?

private void getRowData(LernAppOpenHelper myDbHelper) { 
     String[] columnsTestPage = {"TestPageId", "Question","Picture"}; 
     Cursor cursor = myDbHelper.getQuery("TestPage", columnsTestPage, "TestId = ?", new String[]{testNummer}, null, null, null); 
     startManagingCursor(cursor); 
     cursor.moveToFirst(); 

     while(!cursor.isAfterLast()){ 
      int testPageId = cursor.getInt(cursor.getColumnIndex("TestPageId")); 
      String question = cursor.getString(cursor.getColumnIndex("Question")); 
      String picture = cursor.getString(cursor.getColumnIndex("Picture")); 

      this.testPages.add(new TestPage(testPageId, question, picture)); 
      cursor.moveToNext(); 
     } 
     cursor.close(); 
     columnsTestPage = null; 

     String[] columnsAnswers = {"Answer", "Correct"}; 

     for(TestPage p: testPages){ 
      cursor = myDbHelper.getQuery("Answers", columnsAnswers, "TestId = ? AND TestPageId = ?", new String[]{testNummer, p.getTestPageId()}, null, null, null); 
      cursor.moveToFirst(); 
      while(!cursor.isAfterLast()){ 
       String answer = cursor.getString(cursor.getColumnIndex("Answer")); 
       int correct = cursor.getInt(cursor.getColumnIndex("Correct")); 
       p.setAnswer(answer, correct); 
       cursor.moveToNext(); 
      }   
     } 

     cursor.close(); 
    } 

答えて

3

カーソルをクローズする必要はありませんstartManagingCursor(cursor);使用している場合、Androidはあなたのためにそれを行います。 startManagingCursor(cursor);を削除するか、cursor.close();の参照を削除してください。

EDIT: はこれを試してみてください:

private void getRowData(LernAppOpenHelper myDbHelper) { 
     String[] columnsTestPage = {"TestPageId", "Question","Picture"}; 
     Cursor cursor = myDbHelper.getQuery("TestPage", columnsTestPage, "TestId = ?", new String[]{testNummer}, null, null, null); 

     cursor.moveToFirst(); 
     while(!cursor.isAfterLast()){ 
      int testPageId = cursor.getInt(cursor.getColumnIndex("TestPageId")); 
      String question = cursor.getString(cursor.getColumnIndex("Question")); 
      String picture = cursor.getString(cursor.getColumnIndex("Picture")); 

      this.testPages.add(new TestPage(testPageId, question, picture)); 
      cursor.moveToNext(); 
     } 
     cursor.close(); 
     columnsTestPage = null; 

     String[] columnsAnswers = {"Answer", "Correct"}; 

     for(TestPage p: testPages){ 
      cursor = myDbHelper.getQuery("Answers", columnsAnswers, "TestId = ? AND TestPageId = ?", new String[]{testNummer, p.getTestPageId()}, null, null, null); 
      cursor.moveToFirst(); 
      while(!cursor.isAfterLast()){ 
       String answer = cursor.getString(cursor.getColumnIndex("Answer")); 
       int correct = cursor.getInt(cursor.getColumnIndex("Correct")); 
       p.setAnswer(answer, correct); 
       cursor.moveToNext(); 
      } 
      cursor.close(); // Close the cursor here before the next loop 
     } 
    } 
+0

、これは何も変更doesntの..私はちょうどstartManagingCursorまたはcursor.close()、同じエラーMSGが表示されます。.. – krackmoe

+1

を使用する場合は、新しいコードをお試しください –

関連する問題