2016-03-31 2 views
0

Ich bekomme die oben erwähnte Ausnahme auch nach dem Schließen des Cursors.Android: CursorWindowAllocationException- selbst wenn Sie den Cursor schließen

Unten ist mein Code

public Cursor fetchAllFreeGradeNr(String grade) { 
     open(); 
     String query; 
      query = "SELECT DISTINCT " + C_GRADE + "," + C_GRADE_NR + "" 
        + " FROM '" + TABLE_NAME_PAID + "'" + " WHERE " + C_GRADE 
        + " = '" + grade + "' ORDER BY " + C_GRADE_NR + " ASC"; 

      Cursor mCursor = mDb.rawQuery(query, null); 
      if (mCursor != null) { 
       mCursor.moveToNext(); 
      } 
      close(); 
      return mCursor; 
    } 

Der Absturz an der Linie mCursor.moveToNext();

Below

passiert ist mein log

03-31 12:27:42.433: E/AndroidRuntime(25885): android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=631 (# cursors opened by this proc=631) 
03-31 12:27:42.433: E/AndroidRuntime(25885): at android.database.CursorWindow.<init>(CursorWindow.java:108) 
03-31 12:27:42.433: E/AndroidRuntime(25885): at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198) 
03-31 12:27:42.433: E/AndroidRuntime(25885): at android.database.sqlite.SQLiteCursor.clearOrCreateWindow(SQLiteCursor.java:316) 
03-31 12:27:42.433: E/AndroidRuntime(25885): at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:142) 
03-31 12:27:42.433: E/AndroidRuntime(25885): at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:136) 
03-31 12:27:42.433: E/AndroidRuntime(25885): at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:197) 
03-31 12:27:42.433: E/AndroidRuntime(25885): at android.database.AbstractCursor.moveToNext(AbstractCursor.java:245) 
03-31 12:27:42.433: E/AndroidRuntime(25885): at com.tss.in.database.ISOFitsProvider.fetchAllFreeGradeNr(ISProvider.java:151) 

versuchte auch, wie unten

public Cursor fetchAllFreeGradeNr(String grade) { 
     //Cursor mCursor ; 
     open(); 
     String query; 
      query = "SELECT DISTINCT " + C_GRADE + "," + C_GRADE_NR + "" 
        + " FROM '" + TABLE_NAME_PAID + "'" + " WHERE " + C_GRADE 
        + " = '" + grade + "' ORDER BY " + C_GRADE_NR + " ASC"; 
     Cursor cursor = null; 
     try { 
      cursor = mDb.rawQuery(query, null); 
      if (cursor != null) { 
       return cursor; 
      } 
     } catch (Exception e) { 
      if (cursor != null) { 
       cursor.close(); 
      } 
     } 

     return cursor; 
} 

Der obige Code gibt auch einen Absturz.

Antwort

1

Sie den Cursor schließen sollten, wenn Sie mit ihm fertig sind, ich meine, wenn Sie Daten von ihm sind das Abrufen und bevölkern Ihr Modell dann Sie es schließen müssen, so Ihre Methode sein kann:

public Cursor fetchAllFreeGradeNr(String grade) { 
     open(); 
     String query; 
      query = "SELECT DISTINCT " + C_GRADE + "," + C_GRADE_NR + "" 
        + " FROM '" + TABLE_NAME_PAID + "'" + " WHERE " + C_GRADE 
        + " = '" + grade + "' ORDER BY " + C_GRADE_NR + " ASC"; 

      Cursor mCursor = mDb.rawQuery(query, null); 
      return mCursor; 
    } 

dann in anderen Verfahren zum Beispiel Sie so etwas wie dieses:

if (cursor != null && cursor.getCount() > 0) { 
     cursor.moveToFirst(); 
     do { 
      //... retrieve data 
     } while (cursor.moveToNext()); 
    } 

    if(cursor != null) cursor.close(); 
+0

Vielen you.It arbeitete – hari86

+0

@ hari86 du bist immer willkommen :-) –

0

Die häufigsten Ursachen für diesen Fehler sind nicht geschlossene Cursor. Stellen Sie sicher, dass Sie schließen alle Cursor nach der Verwendung von ihnen

if(mCursor!= null) mCursor.close();