2012-04-08 3 views
0

Я разработал приложение, которое позволяет пользователю сохранять два любимых места для парковки. Он использует службу для извлечения соответствующей информации о парковке из базы данных sqlite. В базе данных у меня есть этот метод, чтобы найти первую запись:sqlite андроидный запрос (курсор)

public Cursor firstentry(){ 
     String select = "SELECT PREF1, PREF2 FROM parking_table WHERE id =1"; 
     Cursor cursor = db.rawQuery(select, null); 
    return cursor; 

Каждый раз, когда я запускаю мое приложение появляется сила близко ошибка, когда служба пытается вызвать этот метод с помощью команды:

Cursor c = dh.firstentry(); 

Это дает ошибку, когда я комментирую ее, приложения работают отлично.

Вот LogCat ошибки:

04-08 18:56:38.673: E/AndroidRuntime(13166): FATAL EXCEPTION: Timer-0 
04-08 18:56:38.673: E/AndroidRuntime(13166): java.lang.NullPointerException 
04-08 18:56:38.673: E/AndroidRuntime(13166): at stefan.testservice.ConnectionService$1.run(ConnectionService.java:64) 
04-08 18:56:38.673: E/AndroidRuntime(13166): at java.util.Timer$TimerImpl.run(Timer.java:284) 
04-08 18:56:39.654: E/ActivityThread(13166): Activity stefan.testservice.TestserviceActivity has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()? 
04-08 18:56:39.654: E/ActivityThread(13166): android.app.IntentReceiverLeaked: Activity stefan.testservice.TestserviceActivity has leaked IntentReceiver [email protected] that was originally registered here. Are you missing a call to unregisterReceiver()? 
04-08 18:56:39.654: E/ActivityThread(13166): at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:756) 
04-08 18:56:39.654: E/ActivityThread(13166): at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:551) 
04-08 18:56:39.654: E/ActivityThread(13166): at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:795) 
04-08 18:56:39.654: E/ActivityThread(13166): at android.app.ContextImpl.registerReceiver(ContextImpl.java:782) 
04-08 18:56:39.654: E/ActivityThread(13166): at android.app.ContextImpl.registerReceiver(ContextImpl.java:776) 
04-08 18:56:39.654: E/ActivityThread(13166): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:318) 
04-08 18:56:39.654: E/ActivityThread(13166): at stefan.testservice.TestserviceActivity$1.onServiceConnected(TestserviceActivity.java:280) 
04-08 18:56:39.654: E/ActivityThread(13166): at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1064) 
04-08 18:56:39.654: E/ActivityThread(13166): at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1081) 
04-08 18:56:39.654: E/ActivityThread(13166): at android.os.Handler.handleCallback(Handler.java:587) 
04-08 18:56:39.654: E/ActivityThread(13166): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-08 18:56:39.654: E/ActivityThread(13166): at android.os.Looper.loop(Looper.java:123) 
04-08 18:56:39.654: E/ActivityThread(13166): at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-08 18:56:39.654: E/ActivityThread(13166): at java.lang.reflect.Method.invokeNative(Native Method) 
04-08 18:56:39.654: E/ActivityThread(13166): at java.lang.reflect.Method.invoke(Method.java:507) 
04-08 18:56:39.654: E/ActivityThread(13166): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-08 18:56:39.654: E/ActivityThread(13166): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-08 18:56:39.654: E/ActivityThread(13166): at dalvik.system.NativeStart.main(Native Method) 
04-08 18:56:40.054: E/ActivityThread(13166): Activity stefan.testservice.TestserviceActivity has leaked ServiceConnection [email protected] that was originally bound here 
04-08 18:56:40.054: E/ActivityThread(13166): android.app.ServiceConnectionLeaked: Activity stefan.testservice.TestserviceActivity has leaked ServiceConnection [email protected] that was originally bound here 
04-08 18:56:40.054: E/ActivityThread(13166): at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:938) 
04-08 18:56:40.054: E/ActivityThread(13166): at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:833) 
04-08 18:56:40.054: E/ActivityThread(13166): at android.app.ContextImpl.bindService(ContextImpl.java:867) 
04-08 18:56:40.054: E/ActivityThread(13166): at android.content.ContextWrapper.bindService(ContextWrapper.java:347) 
04-08 18:56:40.054: E/ActivityThread(13166): at stefan.testservice.TestserviceActivity.doBindService(TestserviceActivity.java:290) 
04-08 18:56:40.054: E/ActivityThread(13166): at stefan.testservice.TestserviceActivity$DownloadTask.onPostExecute(TestserviceActivity.java:193) 
04-08 18:56:40.054: E/ActivityThread(13166): at android.os.AsyncTask.finish(AsyncTask.java:417) 
04-08 18:56:40.054: E/ActivityThread(13166): at android.os.AsyncTask.access$300(AsyncTask.java:127) 
04-08 18:56:40.054: E/ActivityThread(13166): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 
04-08 18:56:40.054: E/ActivityThread(13166): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-08 18:56:40.054: E/ActivityThread(13166): at android.os.Looper.loop(Looper.java:123) 
04-08 18:56:40.054: E/ActivityThread(13166): at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-08 18:56:40.054: E/ActivityThread(13166): at java.lang.reflect.Method.invokeNative(Native Method) 
04-08 18:56:40.054: E/ActivityThread(13166): at java.lang.reflect.Method.invoke(Method.java:507) 
04-08 18:56:40.054: E/ActivityThread(13166): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-08 18:56:40.054: E/ActivityThread(13166): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-08 18:56:40.054: E/ActivityThread(13166): at dalvik.system.NativeStart.main(Native Method) 

Любая помощь очень ценится, как я попробовал все, и ничто не похоже на работу. Заранее спасибо!

Отредактировано:

парковки кодовой таблицы:

public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY, PREF1 TEXT, PREF2 TEXT)"); 
    } 
+0

опубликовать parking_table определения. Вы следовали за тем, что курсор требует, чтобы идентификатор таблицы был указан как _ID? – hovanessyan

+0

, пожалуйста, исправьте меня, если я ошибаюсь, вы предполагаете, что мне нужно «_id = 1» вместо «id = 1»? – progdoc

+0

ConnectionService.java line 64..post, что строка .. –

ответ

0

Мне это удалось, все было в порядке, мне просто нужно было инициализировать объект класса. Вот строка коды необходимо:

this.yourobject = new class(this); 

в моем случае это:

this.dh = new SQLHelper(this); 

Надеется, что это помогает :)

0

Св nullpointerexception означая, что, вероятно, ничего в базе данных в то время. вам нужно обработать, если курсор пуст

Выполнение кода - это действительно единственный способ увидеть то, что является нулевым. Больше кода, безусловно, нужен, хотя его трудно сказать, с тем, что вы вывесили

+0

Привет, есть данные, так как служба начинается с задержки, и я также тестировал ее, вставляя сами фиктивные данные, чтобы убедиться, что пустая база данных не является источником моей проблемы. – progdoc

0

вы работаете rawsql так проверьте точный запрос действителен для дб, SELECT PREF1, PREF2 FROM parking_table WHERE id =1

являются PREF1 точно (с футляром) наименование столбцов ??

+0

да да, sql верен, и имена колонок – progdoc

0

Если у вас нет программного обеспечения браузера SQLite, получить один здесь: SQLite Browser

Это помогает, когда я работаю с SQLite. Я столкнулся с этой проблемой раньше, и я решил ее, добавив параметр id в запрос. По сути, вы хотите изменить свой запрос:

public Cursor firstentry(){ 
    String select = "SELECT id, PREF1, PREF2 FROM parking_table WHERE id =1"; 
    Cursor cursor = db.rawQuery(select, null); 
return cursor; 

Не забудьте позвонить c.moveToFirst() если c это имя курсора.

+0

попробовали, не работали: / – progdoc

Смежные вопросы