Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BroadcastReceiver类中出现空指针异常_Java_Android_Broadcastreceiver - Fatal编程技术网

Java BroadcastReceiver类中出现空指针异常

Java BroadcastReceiver类中出现空指针异常,java,android,broadcastreceiver,Java,Android,Broadcastreceiver,我想在手机启动时搜索一个db并在一个特定的列上祝酒。尽管我觉得代码是正确的,但应用程序仍不断崩溃并出现异常 @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

我想在手机启动时搜索一个db并在一个特定的列上祝酒。尽管我觉得代码是正确的,但应用程序仍不断崩溃并出现异常

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

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


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

是否正确初始化了
mDb
?您能告诉我们您在哪里注册接收器吗?空指针异常通常意味着您没有正确注册它。就像
omg
日志lol一样。这让我们想起了在学校时,我们使用
cout
调试时,有很多非常丰富的注释=PYou应该查看
DBAdapter.fetchAllItems
,第96行,以查看可能出现的空对象
do.close()并且我认为它是有效的(没有错误,但是似乎有错误的db条目在那里)。“mDb=…”是什么意思?短语“initialize
mDb
”经常让人困惑,它只是指将
mDb
设置为某个值,因此
mDb=…
。我发现用两种方式描述它有助于大多数人理解。