2012-04-08 18 views
0

Ich habe eine Anwendung entwickelt, die es dem Benutzer ermöglicht, seine zwei Lieblingsparkplätze zu speichern. Es verwendet einen Dienst, um die relevanten Parkinformationen aus einer SQLite-Datenbank abzurufen. Innerhalb der Datenbank habe ich diese Methode den ersten Eintrag zu finden:sqlite android query (cursor)

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

Jedes Mal, wenn ich meine Anwendung eine Kraft schließen Fehler ausgeführt wird, wenn der Dienst versucht, diese Methode aufrufen dem Befehl:

Cursor c = dh.firstentry(); 

Es gibt den Fehler, als wenn ich es kommentiere, funktioniert die Anwendungen perfekt. Hier

ist die logcat des Fehlers:

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) 

Jede Hilfe sehr geschätzt wird, als ich versuchte alles und nichts scheint zu funktionieren. Danke im Voraus!

Edited:

Parkplatz Tabellencode:

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

Ihre parking_table Definition veröffentlichen. Ist Ihnen gefolgt, dass der Cursor die ID der Tabelle benötigt, um genau als _ID bezeichnet zu werden? – hovanessyan

+0

Bitte korrigieren Sie mich, wenn ich Sie falsch verstanden habe, schlagen Sie vor, dass ich '_id = 1' anstelle von 'id = 1' haben muss? – progdoc

+0

ConnectionService.java Linie 64..post diese Zeile .. –

Antwort

0

Ich schaffte es zu lösen, alles war in Ordnung, ich musste nur das Klassenobjekt initialisieren. Hier ist der Code-Zeile benötigt:

this.yourobject = new class(this); 

in meinem Fall ist es:

this.dh = new SQLHelper(this); 

Hoffe, es hilft :)

0

its a nullpointerexception bedeutet es in der Datenbank wahrscheinlich nichts zu diesem Zeitpunkt ist. Sie müssen behandeln, wenn der Cursor Null ist

Schritt durch den Code ist wirklich die einzige Möglichkeit, genau zu sehen, was null ist. Mehr Code wird auf jeden Fall obwohl es schwer benötigt, um mit zu sagen, was Sie auf dem Laufenden

+0

Hallo, es gibt Daten, da der Dienst mit einer Verzögerung startet und ich es auch getestet habe, indem ich Dummy-Daten selbst eingefügt habe, um sicherzustellen, dass eine leere Datenbank nicht die Quelle meines Problems ist. – progdoc

0

Sie rawsql so überprüfen Sie laufen, wenn die genaue Abfrage für Ihre db gültig ist, SELECT PREF1, PREF2 FROM parking_table WHERE id =1

sind PREF1 genau (mit Fall) den Namen der Spalten ??

+0

ja ja, die sql ist korrekt und so sind die Namen der Spalten – progdoc

0

Wenn Sie keine SQLite Browser-Software haben, erhalten ein hier: SQLite Browser

Es hilft, wenn ich mit SQLite arbeiten bin. Ich bin auf dieses Problem schon einmal gestoßen und habe es gelöst, indem ich den Parameter id in die Abfrage eingefügt habe. Im Wesentlichen werden Sie möchten, dass Ihre Abfrage ändern:

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

nicht c.moveToFirst() wenn c ist der Name des Cursors zu nennen Vergessen.

+0

versuchte es, hat nicht funktioniert: / – progdoc