0

アプリのクラッシュと戦っています。助けを求める時が来ました...

初めて SQLite を使用しています。ListView に単純なイベント ログを表示しようとしています。

メイン アクティビティでは、小さな ListView にログが表示されます。それをクリックすると、全画面表示の ListView を表示する別のアクティビティが起動します。しかし、Preferences 画面から戻る際にも問題が発生します。したがって、問題はメインのアクティビティにあります。

メインのアクティビティは、アプリの起動時に正常に機能します。ただし、別のアクティビティから戻ると、次のようにクラッシュすることがあります。アクティビティを再開できません...既に閉じられているカーソルを再クエリしようとしています。解決策なしであらゆる種類のバリエーションを試しました。デバッグでは、onResume に到達することさえできないようです?

誰かが (onStart、onResume、onRestart) DB コードの各部分がどこに行くべきかを指摘できますか? 手がかりはありますか?

私は、このコードが非推奨の手法に基づいていることを知っています。しかし、ローダーの作成について心配する前に、それを機能させたいと思っています。

どんな助けでも大歓迎です。私は持っている...

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