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(上下文上下文,意图){[…]