2 Stimmen

Android: Cursor wird nicht geschlossen

Ich habe derzeit eine Datenbank, die in einer Schleife eine Tabelle daraufhin überprüft, ob ein Zufallswert vorhanden ist, und ihn dann hinzufügt, wenn dies nicht der Fall ist. Wenn der Zufallswert vorhanden ist, wird einfach ein neuer Zufallswert ermittelt und der Vorgang wiederholt. Dies geschieht 36 Mal und dann wird die Tabelle gelöscht.

Mein Code dafür lautet:

public void loop() {

            random(); //Simple RNG
            try{
                id = db.getAllEntries();
                Log.d(TAG, "ran = " + ran + " i = " + i + " id = " + id);
                db.getTest(ran);
                loop();
            }
            catch(Exception ex){
                populatePeices(ran); //Makes ImageButtons have images
            }

    }

Meine Datenbankmethode ist:

public void getTest(int ran) {
    Cursor cursor = db.rawQuery("SELECT imageName FROM tblMusicHall WHERE imageName = " + ran, null);
    cursor.moveToNext();
    Log.d(TAG, "Cursor " + cursor.getString(0));
    cursor.close();
}

Das Protokoll dient dazu, den Prozess in Echtzeit zu verfolgen. Die Sache ist, es ist VÖLLIG zufällig, wenn es die "Cursor nicht geschlossen"-Ausnahme auslösen wird. Manchmal werde ich beobachten, wie es durch alle 36 Iterationen gehen und nicht werfen ein. Ein anderes Mal durchläuft er alle 36 Iterationen der Schleife und löst dann 36 Ausnahmen aus. Ich bin verblüfft!

Ich habe auch versucht, startManagingCursor() zu verwenden, aber ich möchte die Kontrolle über den Cursor selbst.

Der Fehler, den ich weiterhin erhalte, ist der folgende. Wenn jemand eine Idee hat, bitte teilen!

04-18 07:59:04.280: ERROR/Cursor(31526): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.tallgrass.xxxxxxxxx/databases/xxxxxxxxxx,table = null, query = SELECT imageName FROM tblMusicHall WHERE imageName = 4
04-18 07:59:04.280: ERROR/Cursor(31526): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here 
04-18 07:59:04.280: ERROR/Cursor(31526):     at  android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:210)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1315)
04-18 07:59:04.280: ERROR/Cursor(31526):     at com.tallgrass.xxxxxxxx.DBAdapter.getTest(DBAdapter.java:135)
04-18 07:59:04.280: ERROR/Cursor(31526):     at com.tallgrass.xxxxxxxx.Play.loop(Play.java:45)
04-18 07:59:04.280: ERROR/Cursor(31526):     at com.tallgrass.xxxxxxxx.Play.onCreate(Play.java:31)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:2503)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:651)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.widget.TabHost.setCurrentTab(TabHost.java:323)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.widget.TabHost.addTab(TabHost.java:213)
04-18 07:59:04.280: ERROR/Cursor(31526):     at com.tallgrass.xxxxxxxx.Main.onCreate(Main.java:36)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.os.Looper.loop(Looper.java:123)
04-18 07:59:04.280: ERROR/Cursor(31526):     at android.app.ActivityThread.main(ActivityThread.java:4627)
04-18 07:59:04.280: ERROR/Cursor(31526):     at java.lang.reflect.Method.invokeNative(Native Method) 04-18 07:59:04.280: ERROR/Cursor(31526):     at java.lang.reflect.Method.invoke(Method.java:521)
04-18 07:59:04.280: ERROR/Cursor(31526):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-18 07:59:04.280: ERROR/Cursor(31526):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-18 07:59:04.280: ERROR/Cursor(31526):     at dalvik.system.NativeStart.main(Native Method)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X