4

在 aBroadcastReceiver中,我收到拨出电话的号码。

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

可悲的是,我无法访问BroadcastReceiver我的数据库。在其他活动中它工作正常。

这是代码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;
}
4

1 回答 1

3

确保您使用的是ContextinonReceive(...)方法而不是 NOT this

这样做的原因是它this不是Context在 a 中BroadcastReceiver,您需要一个来访问您的数据库。它在 an 内工作,Activity因为 anActivityContext

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

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);
}
于 2012-10-17T19:57:30.130 回答