3

電話の起動時にデータベースを検索して特定の列をトーストしたい。コードが正しいと感じても、アプリがクラッシュして例外が発生し続けます。

@Override
public void onReceive(Context ctx, Intent intent) {
    Log.d("omg", "1");
    DBAdapter do = new DBAdapter(ctx);
    Log.d("omg", "2");
    Cursor cursor = do.fetchAllItems();
    Log.d("omg", "3");
    if (cursor.moveToFirst()) {
        Log.d("omg", "4");
        do {
            Log.d("omg", "5");
            String title = cursor.getString(cursor.getColumnIndex("item"));
            Log.d("omg", "6");
            // i = cursor.getInt(cursor.getColumnIndex("id"));
            Toast.makeText(ctx, title, Toast.LENGTH_LONG).show();

        } while (cursor.moveToNext());
    }
    cursor.close();
}

イライラする部分は、「omg」ログが logcat に表示されないことです。アプリケーションがクラッシュしたときだけ表示されます。

logcat に 3 行のエラーが表示されます。

10-19 12:31:11.656: E/AndroidRuntime(1471): java.lang.RuntimeException: Unable to start receiver com.test.toaster.MyReciever: java.lang.NullPointerException
10-19 12:31:11.656: E/AndroidRuntime(1471):     at com.test.toaster.DBAdapter.fetchAllItems(DBAdapter.java:96)
10-19 12:31:11.656: E/AndroidRuntime(1471):     at com.test.toaster.MyReciever.onReceive(MyReciever.java:26)

興味のある方のために、ここに私の DBAdapter fetchAllItems コードを示します。

public Cursor fetchAllItems() {
    return mDb.query(DATABASE_TABLE, new String[] { KEY_ITEM, KEY_PRIORITY,
            KEY_ROWID }, null, null, null, null, null);
}
4

1 に答える 1

2

問題は、mDb使用nullする前fetchAllItems()に初期化する必要があることです。mDb

これは単なる推測ですが、多くの DBAdapter 設計にはopen()メソッドがありますね。その場合は、 を呼び出す前にそれを呼び出す必要がありますfetchAllItems()。そうでない場合でもmDb = ...、アダプターのどこかで呼び出す必要があります。

于 2012-10-19T16:58:33.637 に答える