4

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

1 に答える 1

3

メソッドでを使用していることを確認してください。Contextではありません。onReceive(...)this

これは、内にthisないため、データベースにアクセスするために必要なためです。内で動作します。ContextBroadcastReceiverActivityActivityContext

また、正しくなく失敗するクエリを修正してください。

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 に答える