0

一直在与应用程序崩溃作斗争。是时候寻求帮助了...

我是第一次使用 SQLite。我正在尝试在 ListView 中显示一个简单的事件日志。

主要活动在一个小的 ListView 中显示日志。如果单击它,它会启动另一个显示全屏 ListView 的活动。但我也遇到了从首选项屏幕返回的问题。所以问题出在主Activity上。

主 Activity 在启动应用程序时工作正常。但是从另一个活动返回时偶尔会崩溃:无法恢复活动...试图重新查询已经关闭的游标。我已经尝试了各种没有解决方案的变体。在调试的时候,好像连onResume都进不去了?

有人可以指出每段数据库代码应该去哪里(onStart,onResume,onRestart)吗?有什么线索吗?

我知道此代码基于已弃用的技术。但我想在担心创建加载器之前让它工作。

任何帮助将不胜感激。我有...

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();
    }

    ...
}
4

1 回答 1

0

t尝试这样的事情:

在 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

于 2013-08-16T14:45:11.820 回答