В предыдущем вопросе мне сообщили, что мне не нужно поддерживать базу данных, если устройство поворачивается, поскольку оно использует локальную базу данных.
Я подумал, что, по крайней мере, могу сохранить источник данных для моегоСписок.У меня возникают проблемы при попытке сделать это, потому что я получаю сообщение об ошибке, что close () не был вызван в базе данных.Я звоню близко в onDestroy, хотя.
Кто-нибудь может увидеть, где я иду не так?Я просто хочу улучшить работу пользователей, сохранив данные для повторного заполнения списка после того, как они повернут устройство.
Другая вещь, которая меня смущает, - мои операторы журнала выходят в следующем порядке:
- onCreate flight
- первая установка
- повторное использование источника данных
- уничтожение активности
Я ожидал, что уничтожающая деятельность произойдет до повторного использованияисточник данных.
package com.testing.flights;
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");
datasource = (SimpleCursorAdapter) getLastNonConfigurationInstance();
if (datasource == null) {
database = getData();
datasource = getCursor();
Log.v(ACTIVITY_SERVICE, "first setup");
}
setListAdapter(datasource);
}
protected SQLiteDatabase getData() {
DataBaseHelper myDbHelper = new DataBaseHelper(this.getApplicationContext());
return myDbHelper.openDataBase();
}
protected CustomCursorAdapter getCursor() {
Cursor data = database.query("pilots", fields, null, null, null, null, null);
final CustomCursorAdapter mysource = new CustomCursorAdapter(this, R.layout.row, data, fields, new int[] { R.id.id, R.id.name, R.id.flights, R.id.distance });
return mysource;
}
@Override
public Object onRetainNonConfigurationInstance() {
Log.v(ACTIVITY_SERVICE, "reusing datasource");
final SimpleCursorAdapter myData = datasource;
return myData;
}
@Override
protected void onDestroy() {
Log.v(ACTIVITY_SERVICE, "destroying activity");
database.close();
super.onDestroy();
}
}
LogCat:
04-03 16:22:55.900: E/SQLiteDatabase(1860): close() was never explicitly called on database '/data/data/com.testing.flights/databases/club'