Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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
Android 在Broadcastreceiver中访问SQL_Android_Sql_Broadcastreceiver - Fatal编程技术网

Android 在Broadcastreceiver中访问SQL

Android 在Broadcastreceiver中访问SQL,android,sql,broadcastreceiver,Android,Sql,Broadcastreceiver,在一个广播接收器中,我收到一个传出呼叫的号码 我想将此电话号码与存储在SQL数据库中的号码进行比较 遗憾的是,我无法在广播接收器中访问我的数据库。在其他活动中,它工作良好 以下是广播接收器的代码: public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); //[ getting "string phonenumber" (work

在一个
广播接收器中
,我收到一个传出呼叫的号码

我想将此电话号码与存储在SQL数据库中的号码进行比较

遗憾的是,我无法在
广播接收器中访问我的数据库。在其他活动中,它工作良好

以下是
广播接收器的代码:

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

确保您使用的是
onReceive(…)
方法中的
上下文
,而不是

原因是
不是
广播接收器
中的
上下文
,您需要一个上下文才能访问数据库。它在
活动
中工作,因为
活动
上下文

此外,请确保修复不正确且将失败的查询

Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM " + MYDATABASE_TABLE + " where " + KEY_CONTENT1 + "=" + phonenumber, null);
其中KEY_CONTENT1是MYDATABASE_表中电话号码字段的常量

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

我切换了它,但它仍然不起作用:(仍然得到一个空指针@cursor cursor cursor或者你缺少了一些代码来查看发生了什么。你能在接收时显示你的整个
onReceive
或者至少更多你正在做的事情吗?你发布了
openToRead()
函数,但您在代码中不使用它。哦,天哪,很抱歉我粘贴了错误的代码>sqLiteHelper
呢?我相信这是你的问题,但不知道你在哪里初始化它。我在一个文件夹中初始化它们{private SQLiteHelper SQLiteHelper;private SQLiteDatabase SQLiteDatabase;private SQLiteAdapter mySQLiteAdapter;public void onReceive(上下文上下文,意图){[…]