Получение доступа к SQL в Broadcastreceiver

В BroadcastReceiver я получаю номер исходящего звонка.

Я хочу сравнить этот номер телефона с номерами, хранящимися в базе данных 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; } 

Убедитесь, что вы используете Context в onReceive(...) и НЕ this .

Причина этого в том, что this не Context в BroadcastReceiver и вам нужен один, чтобы получить доступ к вашей базе данных. Он работает в рамках 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); }