package com.commonsware.cwac.wakeful.demo;
import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.util.Log;
import android.widget.SimpleCursorAdapter;
public class FlightListActivity extends ListActivity {
private SQLiteDatabase database;
private String fields[] = {BaseColumns._ID, "name", "flights", "distance"};
private SimpleCursorAdapter dataSource;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v(ACTIVITY_SERVICE, "onCreate flights");
database = (SQLiteDatabase) getLastNonConfigurationInstance();
if (database == null) {
database = getData();
Log.v(ACTIVITY_SERVICE, "first load data");
}
Cursor data = database.query("pilots", fields, null, null, null, null, null);
dataSource = new CustomCursorAdapter(this, R.layout.row, data, fields, new int[] { R.id.id, R.id.name, R.id.flights, R.id.distance });
setListAdapter(dataSource);
}
protected SQLiteDatabase getData() {
DataBaseHelper myDbHelper = new DataBaseHelper(this.getApplicationContext());
return myDbHelper.openDataBase();
}
@Override
public Object onRetainNonConfigurationInstance() {
Log.v(ACTIVITY_SERVICE, "reusing data");
final SQLiteDatabase myData = database;
return myData;
}
@Override
protected void onDestroy() {
database.close();
super.onDestroy();
}
}
私はonRetainNonConfigurationInstanceでそれを格納することによって、自分のデータベースを保持しようとしていますので、[OK]をクリックしてデータベースを使用して、私はonDestroyメソッドでデータベースを閉じていない場合、私は、実行時エラーが発生します。アンドロイド - onRetainNonConfigurationInstance
私はそれを得ることはできませんが、私はonDestroyでデータベースを閉じると、どこかで再び開く必要がありますが、最初にそれを保持するオブジェクトを倒すことはありませんか?
これは、ユーザーがデバイスを回転させたときにデータベースを再利用する最もよい方法ですか?
あなたのデータベースは内部ストレージにファイルとして存在しますが、なぜそれを保持する必要があると感じますか?方向変更の結果として 'Activity'が破壊された場合、それは再作成され、' onCreate(...) 'は単に' getData() 'メソッドを呼び出し、' Cursor'が再び作成されます。私はあなたがしようとしていることを理解していません。 – Squonk
私は、ユーザーがビューを回転するたびにデータベースを閉じたままにしておくことが大丈夫かどうかを知りたいだけです。私はそれがコストがかかるかもしれないと思っていました。 – Neil
私はこれを考えていますが、代わりにlistSourceのdataSourceを保持するだけですか? – Neil