0

私は現在、フラグメントのリストビューに取り組んでいます。リストビューはCursorloaderによってロードされますが、ContentManagerはロードされません。したがって、コードは次のようになり、機能します。

@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {

    Log.d("SoapERP", "onCreateLoader");
    CursorLoader loader = new CursorLoader(getActivity()) {
    final DBHelper dbhelper1= new DBHelper(getActivity());       
        @Override
        public Cursor loadInBackground() {
            Cursor c = null;
            dbhelper1.open();
            c = dbhelper1.fetchAllMatnameswithID();
//              dbhelper1.close();
            return c;

        }

     };
    return loader;

私の問題は、データベースが閉じられていないというLogCat-Error-Messageが表示されることです。しかし、dbhelper.close();を使用する場合。「データベースはすでに閉じられています」というエラーが表示されますが、returnステートメントの直前にあるため理解できます。returnステートメントのコードに到達できず、DBHelper dbhelper1 finalを宣言すると、logcatに情報がないままプログラムがクラッシュします。だから私の失敗は何ですか?

4

1 に答える 1

1

最後に、Androidフレームワーク開発のDianne Hackbornの時点で、正しいステートメントを見つけまし。「コンテンツプロバイダーは、ホスティングプロセスが作成されるときに作成され、プロセスが実行される限り存続するため、データベースを閉じる必要はありません。 -プロセスが強制終了されると、カーネルがプロセスのリソースをクリーンアップする一環として閉じられます。DianneHackbornAndroidフレームワークエンジニアhack... @ android.com "-では、コンテンツプロバイダーを使用しましょう。

于 2011-10-28T19:44:26.670 に答える