Come utilizzare il database SQLite precaricato in Android da Assets

Vorrei utilizzare il preloaded database nella mia applicazione significa cercare di get il database al momento dell'installazione di apk in modo da poter utilizzare i dati già salvati in questo. Copiamo il file "ingredients.db" nella cartella degli asset. E Utilizzare il codice riportto di seguito, ma questo viene visualizzato l'errore "Problema di copiare il database dal file di risorse"

Come posso risolvere questo problema? vi prego di suggerire i modi possibili

  • Android: Nessuna attività trovata per gestire l'errore Intent? Come risolverà
  • gestione della memory android nel ciclo di vita dell'attività
  • Android tiene lo schermo in applicazione
  • Android Google Directions Service utilizzabile nativamente? con il canvasio avvolgitore? Sono disponibili routes di trasporto pubblico / bici?
  • availableProcessors () restituisce 1 per i telefoni dualcore
  • Supporto lingua hindi per Android - il text si presenta come scatole
  • La class del mio assistente di database è così

     class IngredientHelper extends SQLiteOpenHelper { private static final String DATABASE_PATH = "/data/data/com.example.preloadeddatabase/databases/"; private static final String DATABASE_NAME = "ingredients.db"; private static final String TABLE_NAME = "Ingredients"; private static final String COLUMN_ID = "_id"; private static final String COLUMN_TITLE = "ingredient_name"; private static final int SCHEMA_VERSION = 1; public SQLiteDatabase dbSqlite; private final Context myContext; public IngredientHelper(Context context) { super(context, DATABASE_NAME, null, SCHEMA_VERSION); this.myContext = context; } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } public void createDatabase() { createDB(); } public void createDB() { boolean dbExist = DbExists(); if (!dbExist) { this.getReadableDatabase(); copyDataBase(); } } private boolean DbExists() { SQLiteDatabase db = null; try { String databasePath = DATABASE_PATH + DATABASE_NAME; db = SQLiteDatabase.openDatabase(databasePath, null, SQLiteDatabase.OPEN_READWRITE); db.setLocale(Locale.getDefault()); db.setLockingEnabled(true); db.setVersion(1); } catch (SQLiteException e) { Log.e("SqlHelper", "Database Not Found"); } if (db != null) { db.close(); } return db != null ? true : false; } private void copyDataBase() { InputStream iStream = null; OutputStream oStream = null; String outFilePath = DATABASE_PATH + DATABASE_NAME; try { iStream = myContext.getAssets().open(DATABASE_NAME); oStream = new FileOutputStream(outFilePath); byte[] buffer = new byte[2048]; int length; while ((length = iStream.read(buffer)) > 0) { oStream.write(buffer, 0, length); } oStream.flush(); oStream.close(); iStream.close(); } catch (IOException e) { throw new Error("Problem Copying Database From Resource File"); } } public void openDatabase() throws SQLException { String myPath = DATABASE_PATH + DATABASE_NAME; dbSqlite = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); } @Override public synchronized void close() { if (dbSqlite != null) { dbSqlite.close(); } super.close(); } public Cursor getCursor() { SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); queryBuilder.setTables(TABLE_NAME); String[] asColumnsToReturn = new String[] { COLUMN_ID, COLUMN_TITLE }; Cursor mCursor = queryBuilder.query(dbSqlite, asColumnsToReturn, null, null, null, null, "ingredient_name ASC"); return mCursor; } public String getName(Cursor c) { return (c.getString(1)); } 

  • Qual è la procedura per rilevare se un dispositivo Android dispone di capacità di invio SMS?
  • Modo consigliato per formattare i numbers in modo locale?
  • Come visualizzare una rotta tra due geofisaro in Google Maps?
  • Modifica dell'allineamento dei pulsanti AlertDialog
  • Come submit i dati da un'applicazione ad un'altra applicazione in android?
  • Caricare un file di grandi size in multipart utilizzando OkHttp
  • 3 Solutions collect form web for “Come utilizzare il database SQLite precaricato in Android da Assets”

    Non aprire il database leggibile fino a quando non si copia il file di risorse nella directory del database. È probabile che tu ricevi l'exception da quando stai cercando di scrivere a un file già aperto (dato che viene aperto quando si chiama getReadableDatabase ()).

    Ecco una soluzione semplice al tuo problema, ma in questo metodo c'è un errore. Quando si utilizza un metodo this.getReadableDatabase () ;, allora il database è aperto, cioè deve essere chiuso this.close (); Questo errore è particolarmente importnte per i dispositivi HTC Desire

    Utilizzare questa soluzione , risolvere il problema di apertura DB.

    il file di database deve avere estensione ".sqlite" invece ".db"

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.