Die Datenbank wird bei der Deinstallation der Android-Anwendung nicht entfernt

Lesezeit: 9 Minuten

Ich habe zwei große Fragen.

  1. Datenbank wird nicht gelöscht, wenn App deinstalliert wird.
  2. Heruntergeladene Dateien werden nicht gelöscht, solange die App instabil ist.

Es gibt eine Datenbank in meiner Android-Anwendung. Ich erstelle es mit Java

class as follows.

public DataBaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

public DataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {
    super(context, name, factory, version, errorHandler);
}

@Override
public void onCreate(SQLiteDatabase db) {
    // creating required tables
    db.execSQL(CREATE_TABLE_QUOTES);
    db.execSQL(CREATE_TABLE_FILTERS);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // on upgrade drop older tables
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUOTES);
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUOTES);
    // create new tables
    onCreate(db);
}

Im Code für die Datenbank ist kein spezifischer Pfad definiert.

Dies ist der Code, mit dem ich Dateien herunterlade. Und es gibt einen bestimmten Pfad, aber es ist nicht erlaubt, auch einen Ordner in Android>data>com.myapp zu erstellen.

public String downloadImage(String img_url, int i) {
        File sdCard = Environment.getExternalStorageDirectory();
        File dir = new File (sdCard.getAbsolutePath() + "/fog/images/filters");
        // Make sure the Pictures directory exists.
        dir.mkdirs();
        File destinationFile = new File(dir, "filter"+i);
        String filepath = null;
        try{
            URL url = new URL("http://fog.wrapper.io/uploads/category/"+img_url+".png");

            HttpURLConnection conection = (HttpURLConnection)url.openConnection();
            conection.setRequestMethod("GET");
            conection.setRequestProperty("Content-length", "0");
            conection.setUseCaches(false);
            conection.setAllowUserInteraction(false);
            conection.connect();

            int status = conection.getResponseCode();

            switch (status) {
                case 200:
                case 201:
                    FileOutputStream fileOutput = new FileOutputStream(destinationFile);
                    InputStream inputStream = conection.getInputStream();
                    int totalSize = conection.getContentLength();
                    int downloadedSize = 0;
                    byte[] buffer = new byte[1024];
                    int bufferLength = 0;
                    while ( (bufferLength = inputStream.read(buffer)) > 0 )
                    {
                        fileOutput.write(buffer, 0, bufferLength);
                        downloadedSize += bufferLength;                            Log.i("Progress:","downloadedSize:"+downloadedSize+"totalSize:"+ totalSize) ;
                    }
                    fileOutput.close();
                    if(downloadedSize==totalSize) filepath = destinationFile.getPath();
                   Log.i("filepath:"," "+filepath) ;
                    return filepath;
            }

        } catch (IOException e) {
            Log.d("ImageManager", "Error: " + e);
        }
        return null;
    }
} // Get filters

Bitte hilf mir. Entschuldige mein schlechtes Englisch.

  • Besteht ein Problem in allen Versionen oder nur in Version 6.0?

    – Mobiles Team ADR-Flutter

    23. April 2018 um 7:20 Uhr

In Android 6.0 hat Google eine neue Funktion namens Auto Backup hinzugefügt.

Wenn diese Option aktiviert ist (standardmäßig aktiviert), kopiert das Android-System fast alle vom System erstellten Verzeichnisse und Dateien und lädt sie in das Google Drive-Konto des Benutzers hoch.

Wenn der Benutzer die App neu installiert, stellt Android automatisch die Daten der App wieder her, unabhängig davon, wie sie installiert wurde (über Play Store, Adb-Installation, Ersteinrichtung des Geräts).

Der Wiederherstellungsvorgang erfolgt nach der Installation des APK, aber bevor die App vom Benutzer gestartet werden kann.

Android-Entwicklerseite:
https://developer.android.com/guide/topics/data/autobackup.html

  • Vielen Dank! Genau das verursachte ein Problem in meiner App. Ich habe dies behoben, indem ich die automatische Sicherung in meiner App deaktiviert habe, indem ich allowBackup auf false gesetzt habe.

    – Hashim Akhtar

    10. Februar 2017 um 12:49 Uhr

  • Genau dieses Problem hatte ich auch. Wäre mir nicht bewusst gewesen, wenn es hier nicht gepostet worden wäre. Vielen Dank

    – Robert Vogl

    2. August 2018 um 19:40 Uhr

  • Ich habe im Manifest hinzugefügt und das Problem in meiner Flutter-Anwendung gelöst.

    – Vipin Krishna

    6. Februar um 10:37 Uhr

Benutzer-Avatar
dazza5000

GUI-WEG

Wenn es sich um ein persönliches Konto handelt und Sie das Backup zu Testzwecken löschen müssen, können Sie für Ihr Konto zu drive.google.com gehen und zum Abschnitt „Backups“ navigieren.

Wählen Sie ein Backup aus und Sie haben die Möglichkeit, die Backups für ein bestimmtes Gerät zu löschen:

Wählen Sie Sicherungen und dann eine zu löschende Sicherung aus

ADB-SHELL-WEG

Sie können dies auch über die Befehlszeile mit dem folgenden tun:

adb shell bmgr wipe com.google.android.gms/.backup.BackupTransportService com.example.app

Weitere Details zu diesem Befehl finden Sie hier:

http://www.androiddocs.com/tools/help/bmgr.html#other

VERWENDUNG DES ADB SHELL BACKUP MANAGER

Die Verwendung für den Befehl finden Sie hier:

https://github.com/aosp-mirror/platform_frameworks_base/blob/6f357d3284a833cc50a990e14b39f389b8972254/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java#L443

    System.err.println("usage: bmgr [backup|restore|list|transport|run]");
    System.err.println("       bmgr backup PACKAGE");
    System.err.println("       bmgr enable BOOL");
    System.err.println("       bmgr enabled");
    System.err.println("       bmgr list transports");
    System.err.println("       bmgr list sets");
    System.err.println("       bmgr transport WHICH");
    System.err.println("       bmgr restore TOKEN");
    System.err.println("       bmgr restore TOKEN PACKAGE...");
    System.err.println("       bmgr restore PACKAGE");
    System.err.println("       bmgr run");
    System.err.println("       bmgr wipe TRANSPORT PACKAGE");
    System.err.println("");
    System.err.println("The 'backup' command schedules a backup pass for the named package.");
    System.err.println("Note that the backup pass will effectively be a no-op if the package");
    System.err.println("does not actually have changed data to store.");
    System.err.println("");
    System.err.println("The 'enable' command enables or disables the entire backup mechanism.");
    System.err.println("If the argument is 'true' it will be enabled, otherwise it will be");
    System.err.println("disabled.  When disabled, neither backup or restore operations will");
    System.err.println("be performed.");
    System.err.println("");
    System.err.println("The 'enabled' command reports the current enabled/disabled state of");
    System.err.println("the backup mechanism.");
    System.err.println("");
    System.err.println("The 'list transports' command reports the names of the backup transports");
    System.err.println("currently available on the device.  These names can be passed as arguments");
    System.err.println("to the 'transport' and 'wipe' commands.  The currently selected transport");
    System.err.println("is indicated with a '*' character.");
    System.err.println("");
    System.err.println("The 'list sets' command reports the token and name of each restore set");
    System.err.println("available to the device via the current transport.");
    System.err.println("");
    System.err.println("The 'transport' command designates the named transport as the currently");
    System.err.println("active one.  This setting is persistent across reboots.");
    System.err.println("");
    System.err.println("The 'restore' command when given just a restore token initiates a full-system");
    System.err.println("restore operation from the currently active transport.  It will deliver");
    System.err.println("the restore set designated by the TOKEN argument to each application");
    System.err.println("that had contributed data to that restore set.");
    System.err.println("");
    System.err.println("The 'restore' command when given a token and one or more package names");
    System.err.println("initiates a restore operation of just those given packages from the restore");
    System.err.println("set designated by the TOKEN argument.  It is effectively the same as the");
    System.err.println("'restore' operation supplying only a token, but applies a filter to the");
    System.err.println("set of applications to be restored.");
    System.err.println("");
    System.err.println("The 'restore' command when given just a package name intiates a restore of");
    System.err.println("just that one package according to the restore set selection algorithm");
    System.err.println("used by the RestoreSession.restorePackage() method.");
    System.err.println("");
    System.err.println("The 'run' command causes any scheduled backup operation to be initiated");
    System.err.println("immediately, without the usual waiting period for batching together");
    System.err.println("data changes.");
    System.err.println("");
    System.err.println("The 'wipe' command causes all backed-up data for the given package to be");
    System.err.println("erased from the given transport's storage.  The next backup operation");
    System.err.println("that the given application performs will rewrite its entire data set.");
    System.err.println("Transport names to use here are those reported by 'list transports'.");

  • Danke, das ist nützlich, aber es ist ein bisschen enttäuschend, dass Sie dort keine Reinigung pro App durchführen können, sondern das Backup des gesamten Geräts löschen müssen.

    – Fran Marzoa

    1. November 2019 um 15:34 Uhr

  • Ich habe die Antwort aktualisiert, um eine Möglichkeit bereitzustellen, die zeigt, wie dies auf App-Basis zu tun ist.

    – dazza5000

    14. Januar 2020 um 3:38 Uhr

  • Großartig! hat sowohl die Antwort als auch den Kommentar positiv bewertet. Dies ist am nützlichsten. Danke!

    – Fran Marzoa

    14. Januar 2020 um 9:47 Uhr

Die automatische Sicherung kann per Einstellung deaktiviert werden android:allowBackup="false" in AndroidManifest.xml

  • Bei dieser Einstellung kann die App nicht erstellt werden false.

    – Anoop Thiruonam

    19. November 2019 um 5:51 Uhr

Benutzer-Avatar
Michael.

Ich bin auf diese Frage gestoßen, als ich nach einer Lösung für ein ähnliches Problem im Zusammenhang mit GreenDao gesucht habe – eine etwas ausführlichere Antwort hier, aber im Grunde müssen Sie, wenn Sie API 23 verwenden, allowBackup auf false setzen, um sich auf die Datenbanken verlassen zu können gelöscht, wenn Sie deinstallieren

https://stackoverflow.com/a/43046256/5298819

Benutzer-Avatar
robkriegerflow

  1. Schauen Sie sich diese SO-Antwort an:

Was passiert mit einer Sqlite-Datenbank, wenn die App entfernt wird

  1. Funktioniert Ihre DB (abgesehen davon, dass sie beim Entfernen der App nicht gelöscht wird)?

  2. Wenn es nicht richtig funktioniert, können Sie einen Blick auf Folgendes werfen:

http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

Obwohl dies nicht unbedingt mit Ihrem Problem zusammenhängt, sollten Sie erwägen, eine zu erstellen open() und close() für Ihre DB und verwenden Sie a SQLiteOpenHelper Objekt in jedem – in open()würden Sie verwenden sqliteopenhelperObj.getWriteableDatabase() und in close() du würdest verwenden sqliteopenhelperObj.close().

http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#close

Bearbeiten:

  1. Wenn Sie beim Testen einer App Dateien auf Ihr Gerät heruntergeladen haben und diese löschen möchten, können Sie die Geräteüberwachung in Android Studio verwenden https://developer.android.com/tools/help/monitor.html Es gibt einen Dateimanager, mit dem Sie Dateien auf Ihren Geräten anzeigen und bearbeiten können. Sie können dies auch auf der Befehlszeile mit der ADB (Android Debug Bridge) tun. https://developer.android.com/tools/help/adb.html

  • Vielen Dank, ich werde das überprüfen und mich bald bei Ihnen melden, wenn es ein Problem gibt.

    – KZONE

    15. März 2016 um 9:30 Uhr

  • Ich habe das gleiche Problem. Ich habe unseren DatabaseHelper auf eine neue Version aktualisiert und die App im Debug-Modus installiert. Nachdem ich mein neu implementiertes Feature fertiggestellt hatte, ging ich mit git einige Commits zurück und versuchte, die alte Version der App zu installieren. Leider funktioniert es nicht, da die App immer den Fehler ausgibt, dass sie die Datenbank nicht downgraden kann. Diese Meldung erscheint sogar, wenn ich die App manuell gelöscht habe, bevor ich die alte Version installiert habe. So komme ich zu dem Ergebnis, dass die Datenbank scheinbar nicht gelöscht wird, wenn ich eine App deinstalliere… echt frustrierend und nervig.

    – Jennymo

    25. August 2016 um 10:40 Uhr


  • Vielen Dank, ich werde das überprüfen und mich bald bei Ihnen melden, wenn es ein Problem gibt.

    – KZONE

    15. März 2016 um 9:30 Uhr

  • Ich habe das gleiche Problem. Ich habe unseren DatabaseHelper auf eine neue Version aktualisiert und die App im Debug-Modus installiert. Nachdem ich mein neu implementiertes Feature fertiggestellt hatte, ging ich mit git einige Commits zurück und versuchte, die alte Version der App zu installieren. Leider funktioniert es nicht, da die App immer den Fehler ausgibt, dass sie die Datenbank nicht downgraden kann. Diese Meldung erscheint sogar, wenn ich die App manuell gelöscht habe, bevor ich die alte Version installiert habe. So komme ich zu dem Ergebnis, dass die Datenbank scheinbar nicht gelöscht wird, wenn ich eine App deinstalliere… echt frustrierend und nervig.

    – Jennymo

    25. August 2016 um 10:40 Uhr


1201350cookie-checkDie Datenbank wird bei der Deinstallation der Android-Anwendung nicht entfernt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy