android完成一个尚未停用或关闭的游标

时间:2011-12-17 10:11:06

标签: android

似乎我无法修复此错误消息。 我正确关闭光标..我甚至尝试创建一个具有不同引用名称的新光标..但这也没有用。我做错了什么?

12-17 10:09:14.107:E / Cursor(277):完成尚未停用或关闭的光标。 database = /data/data/com.lernapp.src/databases/LernApp,table = Answers,query = SELECT Answer,Correct FROM Answers WHERE TestId =? AND 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();
    }

1 个答案:

答案 0 :(得分:3)

如果您使用startManagingCursor(cursor);,则无需关闭光标,Android会为您执行此操作。 删除startManagingCursor(cursor);或删除cursor.close();引用。

修改 试试这个:

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