1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

DB wird nicht geschlossen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von spike, 21.12.2011.

  1. spike, 21.12.2011 #1
    spike

    spike Threadstarter Neuer Benutzer

    Beiträge:
    19
    Erhaltene Danke:
    0
    Registriert seit:
    18.09.2009
    Hi Leute,

    ich habe ein Problem, das ich bisher leider noch nicht lösen konnte.
    Ich öffne in meiner Activit eine Datenbank-Verbindung.
    Das mache mit Hilfe eines DB Helfers

    Code:
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055][LEFT]private[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]void[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] openDataBase(){
    [/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]myDataBase[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]null[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]; 
    [/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]mCursor[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]null[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2];
    [/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]mHelper[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] DatenbankManager([/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]this[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);
    [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]try[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] { 
    [/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]mHelper[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].createDataBase(); 
    } [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]catch[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] (IOException ioe) { 
    [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]throw[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] Error([/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"Unable to create database"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]);
    }
    
    [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]try[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] { 
    [/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]mHelper[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].openDataBase();
    [/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]myDataBase[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] = [/SIZE][SIZE=2][COLOR=#0000c0][SIZE=2][COLOR=#0000c0]mHelper[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].getDatabase();
    } [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]catch[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2](SQLException sqle){ 
    [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]throw[/B][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] sqle; 
    }[/LEFT]
    }
    [/SIZE]
    In meiner onPause und onDestroy Methode schließe ich die DB wieder:
    mHelper.close();

    Wenn ich nun in meiner Activity eine Kontextmenü aufrufe und dort irgendwas auswähle, bekomme ich immer diesen Fehler:

    close() was never explicitly called on database '/mnt/sdcard/de.androiddev.mytestapp/test.db'

    Ich schließe doch aber die DB oder etwa nicht?
    Mittels Google Suche konnte ich leider keine Lösung dafür finden. Dort steht überall das man in onPause und onDestroy die DB schließen soll und das mach ich ja....


    Gruß

    Spike
     
  2. Tom299, 21.12.2011 #2
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    du benutzt doch sicher irgendwo einen cursor, um daten zu lesen, oder? wenn du den cursor nicht schließt, bekommst du auch diese oder ne ähnliche fehlermeldung, habs nicht mehr genau im kopf. vielleicht liegts ja daran ;-)
     
  3. spike, 21.12.2011 #3
    spike

    spike Threadstarter Neuer Benutzer

    Beiträge:
    19
    Erhaltene Danke:
    0
    Registriert seit:
    18.09.2009
    Hi, ja ich verwende einen Cursor in meiner onStart-Methode:
    mCursor​
    = myDataBase.rawQuery(RAW, null);

    startManagingCursor(
    mCursor);

    Meine Close Methode habe ich nun wie folgt:

    private
    void closeDataBase(){
    if (mHelper != null){
    mHelper.close();
    }
    if (mCursor != null){
    mCursor.close();
    }

    }

    Diese Methode rufe ich in der onPause und onDestroy-Methode auf. An der Fehlermeldung hat sich aber leider nichts geändert...

    Gruß

    Spike
     

Diese Seite empfehlen