2011-03-16 60 views
0

我正在寻找我的数据库数量和天气它在它的存在与否,并返回一个布尔值,但查询总是给我当它运行一个空指针异常空指针时,查询数据库

查询

public boolean getPhone(String where){ 
    Cursor cur = db.query(DATABASE_TABLE, new String [] {ID,PHONE_NUMBER},PHONE_NUMBER + "='" + where + "'",null,null,null,null); //fails here at the query 
     Log.v("Cursor", cur.toString()); 
     String test = null; 
     if(cur.moveToFirst()){ 
      do{ 
       test = cur.getString(cur.getColumnIndex(PHONE_NUMBER)); 
       Log.v("ContactDB", test); 
      }while(cur.moveToNext()); 
      return true; 
     } 
      return false; 
    } 

实施

 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) 

一十一月3日至16日:57:06.522:ERROR/AndroidRuntime(28579):在android.app.ActivityThread.handleReceiver(ActivityThread.java:1794)

+0

ContactDB.java中的第87行在哪里? – 2011-03-16 16:59:21

回答

2

您必须打开数据库:

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

或者它会丢NPES。不要忘记close它一旦你不再需要它了。

+0

但getPhone方法在数据库类中,所以它不应该被打开的权利? *编辑 oh nevermind我只是注意到,当我打电话给getPhone方法时,我没有打开它 – tyczj 2011-03-16 17:57:56

+0

所以......你是否使它工作? – Cristian 2011-03-16 18:48:46

+0

yes no more null pointer – tyczj 2011-03-16 19:09:17

0

尝试改变你的db.query(...)行:

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

the documentation,你selection论证不包含WHERE关键字。

+0

here其中是一个字符串,它作为参数传递给getPhone(String where)。 – 2011-03-16 17:48:04

+0

是的 - 但它包含一个'WHERE'关键字? – 2011-03-16 18:57:29

0

db需要打开。另外尝试使用rawquery(query,selectionargs)方法执行sql查询。