1

この問題に関する多くの質問を読みましたが、問題の正しい方向を見つけることができません。おそらく、私は初心者であり、正しい方法を見つけようと必死になっているためです...

私が読んだ限りでは、HoneyCombstartManagingCursorが廃止されたため、「既に閉じたカーソルを要求する」問題が発生しています。そして、HoneyComb 以来、CursorLoader動作する を使用する必要ContentProviderがあり (私は使用しませんし、使用したくありません)、誰かが( hereCursorLoader )なしで使用するクラスを作成したことがわかりました。ContentProvider

私のアプリケーションでは、次のSQLiteようなデータを取得するためのメソッドがたくさんある mySQLiteHelper クラスがあります。

    public Cursor listaBeneficios(String id) {
    String where = "proposta=?";
    String[] whereArgs = {id};
    String[] campos = {"pessoa"};
    Cursor c = db.query(TABLE_BENEFICIOS, campos, where, whereArgs, null, null, null, null);
    if (c.moveToFirst()) {
        return c;
    } else {
        return null;
    }
}

私のActivityでは、次のようにデータを読み取ることができました。

    db = new repositorio(MainActivity.this);
    Cursor c = db.listaBeneficios(PROPOSTA);
    startManagingCursor(c);
    address.setText(c.getString(c.getColumnIndex("address")));
    db.close();

しかし、戻るボタンを押してアクティビティ A に戻るたびに、悪名高い「既に閉じているカーソルを再クエリしようとしている」というメッセージが表示されることに気付きました。これは私を夢中にさせています。

を使用した簡単な例はありますCursorLoadersか? 実装した場合、上記のメソッド (つまり、上記の listaBeneficios()) を引き続き使用できCursorLoadersますか? このクラスは役に立ちますか? どうすれば実装できますか?

どんな親切な助けも大歓迎です。

4

2 に答える 2

1

コンテンツ URI が必要なため、CursorLoader は機能しません。ただし、LoaderまたはAsyncTaskLoaderはいつでも使用できます。これらのクラスのドキュメントには、それらの使用方法の例が含まれています。

于 2012-12-07T01:30:32.763 に答える
0

私の場合、マネージドクエリを使用して、ContentProvider からアクティビティにカーソルを返していました。getContentResolver().query への呼び出しを変更しただけで、問題は解決しました。

Eclipse で Control H を実行して、必要なすべての変更を交換します。

于 2013-10-28T02:28:08.827 に答える