2012-11-09 19 views
6

Ho un'app con due attività.Come funziona SQLiteOpenHelper Contesto

Uno di essi elenca diversi valori mentre l'altro aggiunge nuovi valori a un DB.

Ho un wich classe estende da SQLiteOpenHelper e gestisce le connessioni DB, query, ecc

Ora, capisco che nel costruttore di SQLiteOpenHelper si deve passare un contesto che viene utilizzato per determinare se dispone per creare un nuovo DB o aprirne uno esistente.

Ma se ho una istanza della classe SQLiteOpenHelper in ogni attività, il contesto sarebbe diverso.

C'è un modo per evitare questo?

Grazie.

risposta

5

Passare nel contesto dell'applicazione, (.getApplication()) anziché l'attività. In questo modo, entrambe le istanze accederanno al db usando lo stesso contesto.

2

Il Context potrebbe essere diverso ma non creare DB diversi. Il SQLiteOpenHelper constructor ha un parametro name, questo è il nome del file DB. Se questo esiste non creerà alcun problema il Context passato.

+0

Context è un'interfaccia per l'accesso a risorse di sistema. Come menzionato da Sabadow, quale database è determinato dal nome. –

1

In realtà, il database creato è associato al pacchetto dell'applicazione del contesto. Quindi non importa se hai passato il contesto dell'applicazione o il contesto di attività.

Context.java

/** 
* Open a new private SQLiteDatabase associated with this Context's 
* application package. Create the database file if it doesn't exist. 
... 
... 
*/ 
public abstract SQLiteDatabase openOrCreateDatabase(String name, 
     int mode, CursorFactory factory); 
Problemi correlati