0

データベースでこのエラーの原因が見つかりません。この問題に関連する前に質問を投稿しましたが、コードが非常に長いため、同じ宣言を持ついくつかを削除します。 3000文字。このメソッドを使用してカーソルを閉じようとしましたが、どういうわけか問題は解決しません。

public Cursor getMove(){
    String[] columns = new String[]{KEY_ID1, KEY_MOVENAME};

    Cursor c = null;
    try {
        c = ourDatabase.query(DATABASE_TABLE1, columns, null, null, null, null, null);
    } finally {
        if(c != null){
            c.close();
        }
    }
    return c;
}

とにかく[ここにある]クラス全体誰かが私を助けてくれることを願っています.

4

2 に答える 2

0

その理由は、DB接続の複数のインスタンスを使用していて、配布したすべてのカーソルを閉じていないことが原因である可能性があります。あなたが(あなた自身の)受け入れた答えは危険かもしれません。このメソッドから渡したカーソルを解放しますか?あなたはあなたがそうしなければ決して解放されないであろう電話で貴重な資源をとることになるでしょう。

これを解決するには、1つのデータベースインスタンスを維持し(シングルトンを使用してDB接続を処理することにより)、最終的にすべてのカーソルを閉じます。それらをPOJOにマーシャリングしてすぐにカーソルを閉じるか、カーソルを送り返して、などのメソッドを呼び出して管理しますactivity.managedQuery()。また、AndroidのSQLliteロックメカニズムも確認することをお勧めします。

于 2012-10-22T07:23:47.837 に答える
0

カーソルを閉じることが、このエラーが発生する理由です。これではなく、次のようになります。

public Cursor getMove(){
    String[] columns = new String[]{KEY_ID1, KEY_MOVENAME};

    Cursor c = null;
    try {
        c = ourDatabase.query(DATABASE_TABLE1, columns, null, null, null, null, null);
    } finally {
        if(c != null){
            c.close();
        }
    }
    return c;
}

次のコード行を使用しました。

public Cursor getMove(){
    String[] columns = new String[]{KEY_ID1, KEY_MOVENAME};

    Cursor c = null;
    c = ourDatabase.query(DATABASE_TABLE1, columns, null, null, null, null, null);
    return c;
}
于 2012-10-22T07:10:15.743 に答える