在BroadcastReceiver中获取SQL访问权限

4
在一个BroadcastReceiver中,我接收到一个外拨电话的号码。
我想将这个电话号码与我在SQL数据库中存储的号码进行比较。
可悲的是,在BroadcastReceiver中我无法访问我的数据库。在其他Activity中它可以正常工作。
以下是BroadcastReceiver的代码:
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();

        //[ getting "string phonenumber" (works)]

        mySQLiteAdapter = new SQLiteAdapter(context); 
        mySQLiteAdapter.openToRead();
        sqLiteDatabase = sqLiteHelper.getReadableDatabase();
        Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM MYDATABASE_TABLE =" +    potatos, null);

        if(cursor.getCount() > 0) {

            cursor.moveToFirst();
            while(!cursor.isAfterLast()) {
                cursor.moveToNext();
            }
        }
    }
}

SQLiteAdapter中的代码

public SQLiteAdapter openToRead() throws android.database.SQLException {
    sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION);
    sqLiteDatabase = sqLiteHelper.getReadableDatabase();
    return this;
}
1个回答

3
请确保在onReceive(...)方法中使用Context,而不是this。这样做的原因是thisBroadcastReceiver中不是一个Context,而你需要一个Context来访问你的数据库。它可以在Activity中工作,因为Activity是一个Context
此外,请确保修复查询语句,因为它是不正确的并且会失败。
Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM " + MYDATABASE_TABLE + " where " + KEY_CONTENT1 + "=" + phonenumber, null);

当 KEY_CONTENT1 为 MYDATABASE_TABLE 数据表中电话号码字段的常量时。

SQLiteAdapter mySQLiteAdapter;
@Override
public void onReceive(Context context, Intent intent) {
    mySQLiteAdapter = new SQLiteAdapter(context); 
    mySQLiteAdapter.openToRead();
    sqLiteDatabase = sqLiteHelper.getReadableDatabase();

    Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM " + MYDATABASE_TABLE + " where " + KEY_CONTENT1 + "=" + phonenumber, null);
}

我已经切换了它,但仍然无法工作 :( 仍然在光标处获得Nullpointer - user1750720
你缺少一些代码来查看发生了什么。你能否展示你整个的onReceive函数或者至少更多你正在做的事情?你发布了openToRead()函数,但是你在代码中没有使用它。 - Kirk
天啊,我很抱歉我粘贴了错误的代码 >.< 当然是mySQLiteAdapter.openToRead();!我编辑了我的原始帖子。 - user1750720
我看到变量已经被声明了,但是我没有看到它被初始化。openToRead() 函数是否在你的 OutgoingCallReceiver 中,并且是在那里进行初始化的? - Kirk
你能否只发一下 @gmail 前面的内容? - user1750720
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接