Android 4.0+ でアプリをテストしていますが、うまく機能します。2.2/2.3 で、SQLlite
カーソルに関する問題が発生し続けます。これがアプリの起動時の 90% の時間のように発生する場合、奇妙な部分です。なぜ時々うまくいくのか説明できません。
ここに部分的LogCat
です:
05-01 20:02:30.341: E/Cursor(369): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.---.---/databases/cats.db, table = trending_watching, query = SELECT _id, item_id, item, review, review_id, cat, user, url FROM trending_watching
05-01 20:02:30.341: E/Cursor(369): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
問題が発生する場所は次のとおりです。
スプラッシュ スクリーンでは、MySQL から値を取得し、それらを 2 つの異なる SQLlite テーブルに配置します。テーブルにデータが入力されていることを確認できます。スプラッシュ スクリーンが終了します。
次のアクティビティは、2 つの SQLLite テーブルを取得し、次のようなデータを取得します。
// Open Database
watchItemIdList = datasource
.getWatchStrings(MySQLiteHelper.COLUMN_TREND_WATCH_ITEM_ID);
watchUsers = datasource
.getWatchStrings(MySQLiteHelper.COLUMN_TREND_WATCH_USER);
watchCats = datasource
.getWatchStrings(MySQLiteHelper.COLUMN_TREND_WATCH_CAT);
watchReviews = datasource
.getWatchStrings(MySQLiteHelper.COLUMN_TREND_WATCH_REVIEW);
watchReviewId = datasource
.getWatchStrings(MySQLiteHelper.COLUMN_TREND_WATCH_REVIEW_ID);
watchItems = datasource
.getWatchStrings(MySQLiteHelper.COLUMN_TREND_WATCH_ITEM);
watchUrl = datasource
.getWatchStrings(MySQLiteHelper.COLUMN_TREND_WATCH_URL);
// Close database
ここでデータを取得します。
public List<String> getWatchStrings(String dbColumn) {
Cursor cursor = database.query(MySQLiteHelper.TABLE_WATCHING_REVIEWS,
allTrendWatchingColumns, null, null, null, null, null);
List<String> array = new ArrayList<String>();
while (cursor.moveToNext()) {
String uname = cursor.getString(cursor.getColumnIndex(dbColumn));
array.add(uname);
}
return array;
}
アプリがクラッシュし続けます。次のLogCat
行にあると思います。
Cursor cursor = database.query(MySQLiteHelper.TABLE_WATCHING_REVIEWS,
allTrendWatchingColumns, null, null, null, null, null);