繁体   English   中英

我的BroadcastReceiver类中的空指针异常

[英]Null Pointer Exception in my BroadcastReceiver class

我想在手机启动时搜索数据库并为特定列干杯。 即使我觉得代码是正确的,应用程序仍然会崩溃并获得异常。

@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中遇到三行错误。

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

问题是fetchAllItems()mDbnull ,您需要在尝试使用它之前初始化mDb

这只是一个猜测,但许多DBAdapter设计有一个open()方法,你的吗? 如果是这样,您只需在调用fetchAllItems()之前调用它。 如果没有,你仍然需要在适配器的某个地方调用mDb = ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM