2011年3月5日土曜日

[Android] SQLiteDatabase created and never closed

How to slove the problem "SQLiteDatabase created and never closed"

SQLiteを使ったアプリを作っていたら、ごく稀にタイトルに書いたエラーがログに出力されていることに気がつきました。
ただし、同じ操作をしても再現できません。
ソースをよく見たらCursorのインスタンスをclose()し忘れている箇所が何カ所かありました。
おそらくclose()忘れが原因です。
Cursorが不要になったら直ちにclose()するようにしました。

以下のソースはint型の値をSQLiteに読み書きするキー・バリュー方式(?)のクラスです
このクラスは汎用性が高いのでMtkはアプリケーションの設定情報を保存するためにを使い回してます。
キャッシュが肥大化しないようにVACUUMもします。

上記のソースのc.close()をわざと消して試してみましたが、エラーが起こらないことが多いです。
再現性がないので自動でがclose()してくれてるケースがあるのかもしれません。

SqliteSampleの使い方
1.int型データの保存方法
setIntメソッドで保存します。第1引数はキーとなる文字列、第2引数は保存する値です。
キーが既に保存されていれば値を上書きし、保存されていなければ新規に登録します。

2.int型データの取り出し方法
getIntメソッドで値を取り出します。キーに対応する値がなければgetIntの第2引数の値が返されます。

以上、参考になれば幸いです。

現在公開中
お天気ロイド
Eye元気!
Wi-Fi sync screen
いずれもキャッシュを肥大化させないためにVACUUMしています

0 件のコメント:

コメントを投稿