java - 我的 BroadcastReceiver 类中的空指针异常

标签 java android broadcastreceiver

我想在手机启动时搜索一个数据库并烤一个特定的列。尽管我认为代码是正确的,但该应用程序不断崩溃并出现异常。

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

令人沮丧的是,我没有在 logcat 中看到我的任何“omg”日志。我只看到我的应用程序何时崩溃。

我在 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 = ...

关于java - 我的 BroadcastReceiver 类中的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12978879/

相关文章:

Android - 发送广播开销

java - Spring idref 没有像我想象的那样工作

JavaFX 将抽象类对象添加到 arraylist

java - 如何从action bean获取jsp中选定的值

java - 如何在android中将对象列表从一个 Activity 发送到另一个 Activity ?

java - TextWatcher.onTextChanged() 如何处理预测文本?

android - 在我的 Android 应用程序中接收来电通知

java - Kafka 最近 X 分钟的实时平均值

Android webview 空白 - Android 28 SDK

java - 拒绝广播接收器的权限