一直在与app崩溃作斗争。是时候寻求帮助了......
我第一次使用SQLite。我正在尝试在ListView中显示一个简单的事件日志。
主要活动显示一个小ListView中的日志。如果单击它,它将启动另一个显示全屏ListView的活动。但我也从“首选项”屏幕返回问题。所以问题出在主要活动中。
主要活动在启动应用程序时运行良好。但是当它从另一个Activity返回时偶尔会崩溃:无法恢复活动...试图重新查询已经关闭的游标。我没有解决方案就尝试过各种各样的变化。在调试中,它似乎甚至无法进入onResume?
有人可以指出每个数据库代码应该去哪里(onStart,onResume,onRestart)?有线索吗?
我知道这段代码是基于弃用的技术。但是我想在开始担心创建Loaders之前让它工作。
任何帮助将不胜感激。我有......
public class MainActivity extends Activity implements ...{
private ListView logView;
private SQLiteDatabase db;
private DBAdapter dbAdapter;
private Cursor cursor;
private SimpleCursorAdapter logAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}
@Override
protected void onStart() {
super.onStart();
...
}
@Override
protected void onRestart() {
super.onRestart();
}
@Override
protected void onResume() {
super.onResume();
dbAdapter = new DBAdapter(this);
db = dbAdapter.getReadableDatabase();
cursor = db.query("log", null, null, null, null, null, "_id ASC");
startManagingCursor(cursor);
Log.i(TAG, "cursor="+cursor.toString());
String[] from = { "entry"};
int[] to = { R.id.row_entry };
logAdapter = new SimpleCursorAdapter(this, R.layout.log_row, cursor, from, to);
logView.setAdapter(logAdapter);
logAdapter.notifyDataSetChanged();
logView.setSelection(logView.getCount()-1);
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onStop() {
super.onStop();
}
...
}
答案 0 :(得分:0)
尝试这样的事情:
在onResume()中放
if(db==null) db=dbAdapter.getReadableDatabase();
和onPause()
if(db!=null) { db.close; db=null; }
另外我认为你应该详细研究这篇文章,它会让你坚持这个问题以及你将要构建的每个下一个应用程序。 http://developer.android.com/reference/android/app/Activity.html
它有一个活动生命周期图。通过这种方式,您将知道何时onResume,onPause被调用等,您将知道放置代码的位置。
这里也是一样,但我想有更多解释:http://developer.android.com/training/basics/activity-lifecycle/starting.html