SQLite
 sql >> Database >  >> RDS >> SQLite

Rilevata perdita del database SQLite

Non sono sicuro che tu stia utilizzando SQLiteOpenHelper correttamente... non hai bisogno di quel myDataBase campo, l'idea è che gestisca la tua connessione al database per te. Non sottoclassare in quel modo... a meno che tu non stia facendo cose in onCreate() ecc che non sono pubblicati qui sembra che tu possa semplicemente usare SQLiteOpenHelper direttamente, ovvero:

SQLiteOpenHelper sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
    DB_VERSION_NUMBER);

Supponendo che la fine dell'attività debba interrompere anche l'attività in background, ti consiglio di chiamare AsyncTask.cancel(true) dal tuo Activity.onPause() . Assicurati che il database sia stato ripulito da onCancelled().

E se la tua attività in background è l'unica cosa che legge il database, rendilo proprietario dell'istanza SQLiteOpenHelper. È facile avere problemi con i dati statici, quindi è meglio evitare IMHO. Farei qualcosa del genere:

protected class BackTask extends AsyncTask<String, Integer, String>
{
    private SQLiteOpenHelper sqlite;

    public void BackTask(Context ctx) {
        sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
                                      DB_VERSION_NUMBER);
    }
    @Override
    protected String doInBackground(String... params) 
    {
         try {
                //get requeste data from the database
                //access the web service
                return result;

              } catch (Exception e) { 
         }
         return null;
    }

    @Override
    protected void onCancelled() {
         sqlite.close();
    }

    @Override
    protected void onPostExecute(String result)
         sqlite.close();
         // Update UI here
    }
}