Android 查询数据库时使用空指针

Android 查询数据库时使用空指针,android,nullpointerexception,Android,Nullpointerexception,我在数据库中搜索一个数字,判断它是否存在,并返回一个布尔值,但查询在运行时总是给我一个空指针异常 质疑 实施 ContactDB db = new ContactDB(arg0); boolean dbNumber = db.getPhone(from);//searchNumber(arg0,from); if(dbNumber == true){ //if number exists do stuff

我在数据库中搜索一个数字,判断它是否存在,并返回一个布尔值,但查询在运行时总是给我一个空指针异常

质疑

实施

        ContactDB db = new ContactDB(arg0);
        boolean dbNumber = db.getPhone(from);//searchNumber(arg0,from);
        if(dbNumber == true){
             //if number exists do stuff
        }else{
             //if number does not exist do other stuff
        }
它在查询时总是失败

03-16 11:57:06.522: ERROR/AndroidRuntime(28579): FATAL EXCEPTION: main
03-16 11:57:06.522: ERROR/AndroidRuntime(28579): java.lang.RuntimeException: Unable to start receiver com.app.notifyme.SmsReciever: java.lang.NullPointerException
03-16 11:57:06.522: ERROR/AndroidRuntime(28579):     at android.app.ActivityThread.handleReceiver(ActivityThread.java:1805)
03-16 11:57:06.522: ERROR/AndroidRuntime(28579):     at android.app.ActivityThread.access$2400(ActivityThread.java:117)
03-16 11:57:06.522: ERROR/AndroidRuntime(28579):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:981)
03-16 11:57:06.522: ERROR/AndroidRuntime(28579):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-16 11:57:06.522: ERROR/AndroidRuntime(28579):     at android.os.Looper.loop(Looper.java:123)
03-16 11:57:06.522: ERROR/AndroidRuntime(28579):     at android.app.ActivityThread.main(ActivityThread.java:3683)
03-16 11:57:06.522: ERROR/AndroidRuntime(28579):     at java.lang.reflect.Method.invokeNative(Native Method)
03-16 11:57:06.522: ERROR/AndroidRuntime(28579):     at java.lang.reflect.Method.invoke(Method.java:507)
03-16 11:57:06.522: ERROR/AndroidRuntime(28579):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-16 11:57:06.522: ERROR/AndroidRuntime(28579):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-16 11:57:06.522: ERROR/AndroidRuntime(28579):     at dalvik.system.NativeStart.main(Native Method)
03-16 11:57:06.522: ERROR/AndroidRuntime(28579): Caused by: java.lang.NullPointerException
03-16 11:57:06.522: ERROR/AndroidRuntime(28579):     at com.app.notifyme.ContactDB.getPhone(ContactDB.java:87)
03-16 11:57:06.522: ERROR/AndroidRuntime(28579):     at com.app.notifyme.SmsReciever.onReceive(SmsReciever.java:55)

03-16 11:57:06.522:ERROR/AndroidRuntime(28579):在android.app.ActivityThread.handleReceiver(ActivityThread.java:1794)上,您必须打开数据库:

ContactDB db = new ContactDB(arg0);
db.open();

或者它会抛出NPE。当您不再需要它时,请不要忘记关闭它。

尝试更改您的
数据库。查询(…)
行:

Cursor cur = db.query(
  DATABASE_TABLE,
  new String [] {ID,PHONE_NUMBER},
  PHONE_NUMBER + " = " + theNumber,
  null, null, null, null, null);

根据,您的
选择
参数不应包含
WHERE
关键字。

需要打开数据库。还可以尝试使用rawquery(query,selectionargs)方法执行sql查询

ContactDB.java中的第87行在哪里?这里是一个字符串,在下面的方法getPhone(String Where)中作为参数传递。但是方法getPhone在数据库类中,所以不需要打开它,对吗*编辑哦,没关系,我只是注意到我调用getPhone方法时没有打开它
Cursor cur = db.query(
  DATABASE_TABLE,
  new String [] {ID,PHONE_NUMBER},
  PHONE_NUMBER + " = " + theNumber,
  null, null, null, null, null);