0

データベースを読み取っているときにカーソルでエラーが発生しました:

04-07 18:11:25.672: ERROR/AndroidRuntime(5801): android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=666 (# cursors opened by this proc=666)

それはライン上で起こります

cursor.getCount()

ファイル全体は8kbで、32行ありますが、IDは737から768になりますが、そこから問題が発生しますか?

(IDが600未満の場合は問題ないことに気づきました)

4

2 に答える 2

0

(質問編集でOPが回答した質問。コミュニティwikiの回答に変換されました。回答がない質問を参照してください。ただし、コメントで問題が解決されました(またはチャットで拡張されました)

OP は次のように書いています。

問題を解決しました。私のコードは:

public News getNewsWithID(int id){
        Cursor c = bdd.query(TABLE_NEWS, new String[] {COL_ID, COL_ASSO, COL_DATE, COL_HEURE, COL_TYPE, COL_TITRE, COL_CONTENU, COL_SERVEURID}, COL_ID +"='"+ id +"'" , null, null, null, null);
        return cursorToNews(c);
    }

私はに変更しました:

public News getNewsWithID(int id){
        Cursor c = bdd.query(TABLE_NEWS, new String[] {COL_ID, COL_ASSO, COL_DATE, COL_HEURE, COL_TYPE, COL_TITRE, COL_CONTENU, COL_SERVEURID}, COL_ID +"='"+ id +"'" , null, null, null, null);
        News temp = cursorToNews(c);
        c.close();
        return temp;
    }

onDestroy() でカーソルが閉じられたと思いました。

于 2015-01-30T11:59:00.467 に答える
0

finally例外が発生した場合でもカーソルが確実に閉じられるように、ブロック内のカーソルを実際に閉じる必要があります。

public News getNewsWithID(int id){
    Cursor c = bdd.query(TABLE_NEWS, new String[] {COL_ID, COL_ASSO, COL_DATE, COL_HEURE, COL_TYPE, COL_TITRE, COL_CONTENU, COL_SERVEURID}, COL_ID +"='"+ id +"'" , null, null, null, null);
    try {
        return cursorToNews(c);
    } finally {
        c.close();
    }
}
于 2015-01-30T12:02:49.350 に答える