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扶住我的數據庫,但我得到一個運行時錯誤,如果我沒有在的onDestroy方法關閉數據庫。Android的 - 使用數據庫onRetainNonConfigurationInstance
我不明白,如果我在onDestroy中關閉數據庫,那麼我需要在某個地方重新打開它,但是這並沒有打敗首先堅持它的對象?
這是在用戶旋轉設備時重用數據庫的最佳方式嗎?
您的數據庫作爲您的內部存儲中的文件存在 - 您爲什麼覺得需要「堅持下去」?如果'Activity'由於方向改變而被破壞,那麼它將被重新創建,'onCreate(...)'將簡單地調用你的getData()方法,然後再次創建'Cursor'。我不明白你想要做什麼。 – Squonk 2012-03-18 20:05:21
我只想知道,如果每當用戶旋轉視圖時它能夠繼續關閉並打開數據庫,我認爲它可能是昂貴的,因此保持它並保持開放可能是一個好主意。 – Neil 2012-03-19 00:04:46
也許我會想這個,我應該只是舉行列表視圖的數據源呢? – Neil 2012-03-19 00:05:46