Java BroadcastReceiver类中出现空指针异常
我想在手机启动时搜索一个db并在一个特定的列上祝酒。尽管我觉得代码是正确的,但应用程序仍不断崩溃并出现异常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
@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=…”是什么意思?短语“initializemDb
”经常让人困惑,它只是指将mDb
设置为某个值,因此mDb=…
。我发现用两种方式描述它有助于大多数人理解。