2011-10-26 11 views
0

現在、私はフラグメントのリストビューを作成中です。リストビューはCursorloaderによってロードされますが、ContentManagerはロードされません。だから、コードは次のようになりますし、それが動作します:Cursorloaderでデータベースをクローズする方法

@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 - エラー・メッセージを取得することです。しかし、私がdbhelper.close()を使うと、 "データベースは既に閉じられています"というエラーが表示されます。これは、returnステートメントの直前であるためにもわかります。 return文のコードに到達できないと、DBHelper dbhelper1 finalを宣言すると、プログラムはlogcatの情報なしでクラッシュします。だから私の失敗は何ですか?

+0

エラーを防止するために、私はコンテンツプロバイダでそれをやろうとしましたが、問題はまだ同じです。しかし、今私は問題に少し近づいていると思う - スレッド。私は他のスレッドがまだデータを収集している間にデータベースを閉じています。今私にはこれに適切な解決策を得る方法が完全に不明です。 –

答えて

1

最終的にアンドリューフレームワークの開発のDianne Hackborn氏の言葉通りに、hereが見つかりました。「コンテンツプロバイダは、ホスティングプロセスが作成されたときに作成され、プロセスの間は残ります。プロセスが終了すると、プロセスのリソースをクリーンアップするカーネルの一部として閉じられます。Dianne Hackborn Androidフレームワークエンジニアhack ... @ android.com " - コンテンツプロバイダを使用しましょう。

関連する問題