異なるメソッドのカスタムビューで同じカーソルを複数回使用します。使用するたびにカーソルを閉じる必要がありますか、それともビューが破棄されるまでカーソルを開いたままにすることができますか?また、データベースについても同じですが、このビューを保持するアクティビティが作成されたら開いて、アクティビティが破棄されたときに閉じることができますか?上記のように実行すると、「close()がデータベースで明示的に呼び出されたことはありません...」というエラーが継続的に発生します。
3 に答える
使用するたびにカーソルを閉じる必要がありますか、それともビューが破棄されるまでカーソルを開いたままにすることができますか?
依存します。その間にカーソルの結果が変わらない場合(たとえば、リモート接続でDBを変更する場合)、問題ありません。Androidにカーソルを自動的に管理させるために使用することを忘れないでくださいCursorLoader
(たとえば、アプリがクラッシュした場合はカーソルを閉じます)。
また、データベースについても同じですが、このビューを保持するアクティビティが作成されたら開いて、アクティビティが破棄されたときに閉じることができますか?
はい、コールバックを開いonResume()
たり閉じonPause()
たりすることができます。または、データベースがクエリされなくなることがわかっている場合も同様です。
上記のように実行すると、「close()がデータベースで明示的に呼び出されたことはありません...」というエラーが継続的に発生します。
これは、アプリがクラッシュした場合にのみ正常です。私が上で言ったようにあなたがそれをしているなら、起こらないはずです。
不要になったら、DBへのすべての接続を閉じます。後で必要になった場合、つまりアクティビティが破棄されるときに接続を閉じる場合は、接続を維持してもかまいません。
そのエラーを回避するために、データベースとカーソルのコードをonResumeとonPauseに移動してみてください。しかし、アクティビティにLoaderCallbacksを実装するのが、よりクリーンな方法だと思います。あなたはそれを考慮しましたか?