per implementare un gestore di SQLite per l'accesso di lettura / scrittura a filetti?

Sto progettando di migliorare la mia implementazione di SQLite – attualmente, le attività stanno aprendo il DB SQLite each volta che hanno bisogno di alcuni dati pertinenti, quindi la chiudono. Chiudere il DB è importnte per evitare eccezioni.

i miei obiettivi di progettazione:

  • Come hide il layout quando lo schermo rimane intatto dall'utente?
  • Come get tutti i contatti nome, cognome, email, numero di telefono, ecc senza duplicati
  • su android Ritorni getBounds disegnabili Rect (0, 0 - 0, 0)
  • Quando devo usare @android: id /?
  • Xamarin Android - nessun flowlayout?
  • installare ed eseguire un'applicazione su più dispositivi con un solo clic in eclipse
    1. accesso thread-safe a DB SQLite di un'applicazione

    2. sincronismo

    Quello che ho pensato di fare è implementare una sorta di class "Manager" invece della mia class di base "SQLhelper". Voglio l'operazione sincrona in modo che escluda l'implementazione come servizio con messaggi.

    Penso che il modo migliore per implementare questo "SQLiteManager" sia come un singolo.

    Ci sono implementazioni migliori?

    One Solution collect form web for “per implementare un gestore di SQLite per l'accesso di lettura / scrittura a filetti?”

    Fase 1 – estendere la class Applicazione

    import android.app.Application; import android.content.Context; /** * This class is created automatically when the app launches. * It is used to provide an application-level context for the SQLiteOpenHelper */ public class ApplicationContext extends Application { private static ApplicationContext instance; public ApplicationContext() { instance = this; } public static Context getContext() { return instance; } } 

    Passaggio 2 – aggiornare il manifesto in modo che questa class di applicazione sia utilizzata

     <application android:name="ApplicationContext" android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> 

    Fase 3 – build il singleton SQLdataHelper nella tua app

     public class SQLdataHelper { //for logging private final String TAG = this.getClass().getSimpleName(); //DATABASE private static final String DATABASE_NAME = "my.db"; private static final int DATABASE_VERSION = 1;//initial version //TABLE NAMES private static final String TABLE_NAME_A = "exampleOneTable"; //MEMBER VARIABLES private DatabaseHelper mDBhelper; private SQLiteDatabase mDB; //SINGLETON private static final SQLdataHelper instance = new SQLdataHelper(); private SQLdataHelper() { final DatabaseHelper dbHelper = new DatabaseHelper(ApplicationContext.getContext()); //open the DB for read and write mDB = dbHelper.getWritableDatabase(); } public static SQLdataHelper getInstance() { return instance; } /** * INSERT FUNCTIONS consisting of "synchronized" methods */ public synchronized long insertTableA(String myName, int myAge) { Long lValueToReturn; //organize the data to store as key/value pairs ContentValues kvPairs = new ContentValues(); kvPairs.put("ColumnOne", myName); kvPairs.put("ColumnTwo", myAge); lValueToReturn = mDB.insert(TABLE_NAME_A, null, kvPairs); return lValueToReturn; } private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } //this is called for first time db is created. // put all CREATE TABLE here @Override public void onCreate(SQLiteDatabase db) { db.execSQL( "CREATE TABLE " + TABLE_NAME_A + " (" + "_id INTEGER PRIMARY KEY AUTOINCREMENT," + "ColumnOne TEXT," + "ColumnTwo TEXT" + ")" ); } //this is called when an existing user updates to a newer version of the app // add CREATE TABLE and ALTER TABLE here @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //update SQL DB with new columns depending on old version // also add new tables //NOTE: whatever is done here must also go into onCreate() so that new users get the correct db created switch(oldVersion) { case 1: //EXAMPLE db.execSQL("ALTER TABLE " + TABLE_NAME_A + " ADD COLUMN ColumnThree INTEGER;"); //don't use a break. for next case simply let them run together to update all the way to latest version //This way, the case just represents a starting point to start updating. case 2: //EXAMPLE db.execSQL("ALTER TABLE " + TABLE_NAME_A + " ADD COLUMN ColumnFour INTEGER;"); } //this code drops the table and will create a fresh one. Note all data lost! // db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME_C); // onCreate(db); } } } 

    Ho incluso solo un'operazione di inserimento di esempio. Aggiungete di più come li hai necessiti e semplicemente assicurati che siano methods "sincronizzati".

    Fase 4 – utilizzare SQLdataHelper nella tua attività

      SQLdataHelper mDataHelper = SQLdataHelper.getInstance(); mDataHelper.insertTableA("Someone", 100); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.