5

Voglio verificare se un database SQLite è aperto, e se lo è, vorrei accedere a quel database all'interno di una classe di servizio.Attività e accesso in background al database SQLite

io sono preoccupato, e ho visto, che più inviti aperti allo scontro database e generare eccezioni. Poiché eseguo l'interrogazione del database all'interno delle mie classi di attività e servizio, sto tentando di implementare la soluzione di Commonsware consigliata qui: When to close db connection on android? Every time after your operation finished or after your app exit. Tuttavia, non desidero chiudere, quindi aprire il Database all'interno della classe Service se l'attività potrebbe averne bisogno. Da questa risposta Why use SQLiteOpenHelper over SQLiteDatabase?, sembra che potrebbe avere senso per implementare uno SQLiteOpenHelper per risolvere il problema di rendere più chiamate.

Grazie mille per tutto il vostro aiuto !!

risposta

5

Quest'uomo Kevin è una leggenda: http://touchlabblog.tumblr.com/post/24474750219/single-sqlite-connection. Grazie mille.

su quel link egli condivide la sua ridicolmente semplice soluzione:

public class DatabaseHelper extends OrmLiteSqliteOpenHelper { 
private static DatabaseHelper instance; 

    public static synchronized DatabaseHelper getHelper(Context context) 
    { 
     if (instance == null) 
      instance = new DatabaseHelper(context); 

     return instance; 
    } 
    //Other stuff... 
} 

Poi nella mia classe SQLite ho cambiato il mio codice di simile a questa:

public BlacklistWordDataSource(Context context) { 
    dbHelper = MySQLiteHelper.getHelper(context); 
} 
+8

E 'solo un codice di Singleton, perché per essere così affascinato? –

+1

Una vera leggenda userebbe un 'enum' per questo ... –

+3

Una vera leggenda non si preoccupa dei suoi (o dei suoi) critici. Ad ogni modo, la leggenda continua: http://kpgalligan.tumblr.com/post/109546839958/single-database-connection. È solo una raccolta di link sull'argomento. Continua a venire. –

-2

al onCreat nell'attività mettere datasource.open(); poi fare quello che volete e alla fine di actevity mettere questo di chiudere:

/** Call after close activity */ 
@Override 
protected void onStop() { 
    super.onStop(); 
    //Close dataSource 
    datasource.close(); 
}