нулевой указатель при запросе базы данных - PullRequest
0 голосов
/ 16 марта 2011

Я ищу число в моей базе данных и знаю, существует ли оно в нем или нет, и возвращает логическое значение, но запрос всегда дает мне исключение нулевого указателя при его запуске

запрос

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)

03-16 11: 57: 06.522: ОШИБКА / AndroidRuntime (28579): на android.app.ActivityThread.handleReceiver (ActivityThread.java:1794)

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

Вы должны открыть базу данных:

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

или он бросит NPE. Не забудьте close, если вам это больше не нужно.

0 голосов
/ 16 марта 2011

БД необходимо открыть.Также попробуйте выполнить SQL-запрос, используя метод rawquery (query, selectionargs).

0 голосов
/ 16 марта 2011

Попробуйте изменить строку db.query( ... ):

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

Согласно документации , ваш аргумент selection не должен содержать ключевое слово WHERE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...