2012-10-17 105 views
4

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

回答

3

确保您使用的onReceive(...)方法Context和NOT this

原因是this不是BroadcastReceiver内的Context,您需要一个才能访问您的数据库。它在Activity内工作,因为ActivityContext

此外,请务必修复您的查询,这是不正确的,将失败。

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

我打开它,它仍然没有工作:( 仍然得到一个空指针@光标光标 – user1750720

+0

你缺少一些代码,看看到底是怎么回事,你能请出示您的整个'onReceive'或你至少在做更多的事情?你发布了'openToRead()'函数,但是你没有在代码中使用它。 – Kirk

+0

哦,天啊,对不起,我粘贴了错误的代码>。<它的mySQLiteAdapter.openToRead();当然! 我编辑了我原来的帖子 – user1750720