Autore Topic: Caricare su Android un database sqlite già esistente  (Letto 937 volte)

Offline omix

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Caricare su Android un database sqlite già esistente
« il: 05 Luglio 2011, 17:27:39 CEST »
0
Ciao a tutti,

ho creato un'applicazione che, con un ContentProvider, gestisce un database con diverse tabelle. Finora è filato tutto liscio, ma adesso devo provare l'applicazione caricando molti più dati (presenti nel database sqlite che ho sul pc). Per caricare i dati, devo prima avviare l'applicazione, che crea le varie tabelle, e poi con adb pull posso popolare le tabelle prendendo i dati dal database che ho sul pc.
Vorrei evitare questi 2 passaggi, e creare il database già popolato prendendolo dagli asset. A questo scopo ho usato la guida presente a questa pagina: http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/.
Purtroppo la guida non prevede che venga utilizzato un ContentProvider (che a me serve per condividere i dati tra 2 applicazioni), ma ho provato a modificare il codice, così che all'onCreate venga chiamata la classe createDatabase:

Codice: [Seleziona]
private static class DatabaseHelper extends SQLiteOpenHelper {
           
            Context _context;
            private SQLiteDatabase myDataBase;

        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            this._context = context;
            }
           
            @Override
            public void onCreate(SQLiteDatabase db) {       
                    try {                         
                            createDataBase();
                    } catch (IOException ioe) {
                            throw new Error("Unable to create database");
                    }
            }

Purtroppo mi viene restituito il seguente errore:
Codice: [Seleziona]
I/Database(16976): sqlite returned: error code = 5, msg = database is locked
E/Database(16976): SELECT locale FROM android_metadata failed
E/Database(16976): Failed to setLocale() when constructing, closing the database
E/Database(16976): android.database.sqlite.SQLiteException: database is locked

In una delle domande tra i commenti, viene chiesto come sia possibile usare questo codice per un ContentProvider, ma non c'è stata risposta.
Qualcuno hai idea di come si possa fare qualcosa del genere, ovvero creare un Database prendendolo dagli Asset?
Grazie mille anticipatamente