2016-03-10 19 views
18

Ho due domande principali.Il database non verrà rimosso quando si disinstalla l'applicazione Android

  1. Il database non verrà eliminato quando si disinstalla l'app.
  2. I file scaricati non vengono eliminati quando l'app è instabile.

C'è un database nella mia applicazione Android. Lo creo da 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); 
} 

Non v'è alcun percorso specifico definito il codice per il database.

Questo è il codice di come scaricare i file. E c'è un percorso specifico, ma non è permesso creare cartella anche in Android> data> com.myapp.

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 

Per favore aiutatemi. Scusa per il pessimo inglese.

risposta

2
  1. Date un'occhiata a questo SO rispondere:

What happens to a Sqlite database when app is removed

  1. Il vostro lavoro DB (a parte, non di eliminare quando si rimuove l'applicazione)?

  2. Se non funziona correttamente, si consiglia di dare un'occhiata a:

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

Anche se questo non è necessariamente legato al tuo problema, si potrebbe prendere in considerazione la creazione di un open() e close() per il DB e utilizzare un oggetto SQLiteOpenHelper in ciascuno - in open(), si utilizzerà sqliteopenhelperObj.getWriteableDatabase() e in close() si utilizzerà sqliteopenhelperObj.close().

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

Edit:

  1. Se hai scaricato i file sul dispositivo durante il processo di testare un app, e si desidera eliminarli, è possibile usa il Monitor dispositivo in Android Studio https://developer.android.com/tools/help/monitor.html C'è un gestore di file che ti permetterà di vedere e modificare i file sui tuoi dispositivi. Puoi anche farlo nella riga di comando con ADB (Android Debug Bridge) https://developer.android.com/tools/help/adb.html
+0

ringrazio molto, vado a controllare questo e tornare a voi presto se non v'è alcun problema . – KZoNE

+0

Ho lo stesso problema. Ho aggiornato il nostro DatabaseHelper a una nuova versione e ho installato l'app in modalità di debug. Dopo aver terminato la mia funzione appena implementata, ho usato git per recuperare alcuni commit prima e ho provato ad installare la vecchia versione dell'app. Sfortunatamente non funziona, perché l'app dà sempre l'errore, che non può effettuare il downgrade del database. Questo messaggio appare anche se ho cancellato l'app manualmente prima di installare la versione precedente. Quindi sto arrivando al risultato, che il database non sembra essere cancellato, se disinstallo un'applicazione ... davvero frustrante e fastidioso. – jennymo

43

in Android 6.0, Google ha aggiunto una nuova funzione chiamata Backup automatico.

quando questa opzione è attiva (l'impostazione predefinita è attivata), il sistema Android copia quasi tutte le directory e i file creati dal sistema e li carica nell'account dell'unità utente di Google.

Quando l'utente reinstalla l'app, Android ripristina automaticamente i dati dell'app, indipendentemente dal modo in cui è stata installata (tramite Play Store, adb install, setup iniziale del dispositivo).

L'operazione di ripristino si verifica dopo l'installazione dell'APK, ma prima che l'app sia disponibile per essere avviata dall'utente. Pagina

sviluppatori di Android: https://developer.android.com/guide/topics/data/autobackup.html

+11

Grazie! Questo era esattamente ciò che stava causando un problema nella mia app. Ho risolto questo problema disattivando il Backup automatico sulla mia app impostando allowBackup su false.

0

ho cam attraverso questa domanda quando ero alla ricerca di una soluzione ad un problema simile relativa a GreenDao - un po 'più in risposta approfondita qui, ma in fondo se la tua su api 23 si 'll necessario impostare allowBackup false per essere in grado di dipendere dalle basi di dati che è eliminato quando si disinstalla

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