Android aggiornamenti maniglia app e modifiche al database
-
30-09-2019 - |
Domanda
Ho praticamente finito di sviluppare un app Android che fa uso di database SQLite che copio per l'area dei dati utente sul dispositivo ad esempio /data/data/com.company.app/databases/users.db
Non sono sicuro di come la procedura di aggiornamento marketplace di app avviene e sono anche sicuri di come ho potuto testarlo.
Attualmente verificare se il database esiste sul dispositivo e copiarlo se lo fa non è (in genere si verifica solo al primo avvio mai). Cosa succede se ho una nuova versione della banca dati nella mia app aggiornato? Sarà un aggiornamento mercato cancellare i dati degli utenti in modo che possa copiare il mio nuovo database in sul prossimo lancio?
Che cosa succede in futuro, se faccio record di modifiche al database / add / etc e il pacchetto questo con la nuova app? Sarà questo database non sovrascrivere il vecchio database?
In caso contrario, per evitare di copiare e ignorando i database dal bundle app su ogni lancio c'è un modo per controllare la dimensione e la data dei file di database e solo copiare se il database nel bundle è più recente?
Se qualcuno ha bisogno di chiarimenti si prega di chiedere.
Soluzione
che sto facendo qualcosa di simile. Quello che ho fatto è impostata la versione del database, e quindi quando posso controllare se il database esiste, ho anche per assicurarsi che sia la versione corretta. Se non è, risparmio preferiti utente dal database, asciugo e ricopio il mio db, e quindi rimessi preferiti dall'utente.
Questa è la mia su di aggiornamento
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion == 2) {
System.out.println("Performing upgrade!");
openDataBase();
// save the old favorites
Cursor mCursor = getFavorites();
ArrayList<Stop> favs = allCursorToStops(mCursor);
mCursor.close();
deleteRecreate(db);
openDataBase();
for (int i = 0; i < favs.size(); i++)
setFavorite(favs.get(i));
close();
} else {
deleteRecreate(db);
}
}
Qui è dove ho verificare l'esistenza / se necessario aggiornare etc
boolean dbExist = checkDataBase();
if(dbExist){
// check if we need to upgrade
openDataBase();
int cVersion = myDataBase.getVersion();
close();
if(cVersion != VERSION)
onUpgrade(myDataBase, myDataBase.getVersion(), VERSION);