Base de datos externa de Android en la carpeta de activos

Tengo una aplicación de Android que se supone que leer y ampliar una base de datos que ya está creado en sqlite … funciona bien en emulador mediante la inserción de la base de datos en la carpeta "data / data / (packagename) / base de datos" en el explorador de archivos de emulador . Ahora el problema está ocurriendo con el dispositivo real. Obviamente no tiene la base de datos para abrir. Intenté poner la base de datos en carpeta de activos pero no estoy consiguiendo abrirla con el openhelper.

Debe copiar el archivo .db de su carpeta de activos a un almacenamiento interno / externo. Puede utilizar los siguientes códigos,

private static String DB_PATH = "/data/data/your package/database/"; private static String DB_NAME ="final.db";// Database name 

Para crear una base de datos,

 public void createDataBase() throws IOException { //If database not exists copy it from the assets boolean mDataBaseExist = checkDataBase(); if(!mDataBaseExist) { try { //Copy the database from assests copyDataBase(); Log.e(TAG, "createDatabase database created"); } catch (IOException mIOException) { throw new Error("ErrorCopyingDataBase"); } } } 

Compruebe que la base de datos existe aquí: / data / data / your package / database / DB Name

 private boolean checkDataBase() { File dbFile = new File(DB_PATH + DB_NAME); return dbFile.exists(); } 

Copiar la base de datos de los activos

  private void copyDataBase() throws IOException { InputStream mInput = getApplicationContext().getAssets().open(DB_NAME); String outFileName = DB_PATH + DB_NAME; OutputStream mOutput = new FileOutputStream(outFileName); byte[] mBuffer = new byte[1024]; int mLength; while ((mLength = mInput.read(mBuffer))>0) { mOutput.write(mBuffer, 0, mLength); } mOutput.flush(); mOutput.close(); mInput.close(); } 

Espero que te ayude

Usted no puede acceder a la base de datos desde la carpeta de activos directamente que necesita para copiarlo primero a la ruta de datos / datos / (packagename) / base de datos a continuación, utilizarlo:

  private String DB_PATH = "/data/data/" + "yourpackaename" + "/databases/" + "db.db"; 

En su onCreate ()

  is = getAssets().open("db.db"); write(is); 

Entonces el método para llamar:

 public void write(InputStream is) { try { OutputStream out = new FileOutputStream(new File(DB_PATH)); int read = 0; byte[] bytes = new byte[1024]; while ((read = is.read(bytes)) != -1) { out.write(bytes, 0, read); } is.close(); out.flush(); out.close(); System.err.println(out + "\n"); } catch (IOException e) { e.printStackTrace(); } } 

No se puede abrir directamente archivos desde la carpeta de activos . En su lugar, debe copiar el contenido de su carpeta de activos en un almacenamiento interno / externo y utilizar posteriormente la ruta de acceso de File para abrir el archivo. En los emuladores, es más fácil para usted acceder a la carpeta de datos de sus aplicaciones. Sin embargo, en un dispositivo no andrajoso real, no es posible por razones de seguridad.

Usted necesita primero copiar el archivo de la base de datos de assests a la localización de los datos de la aplicación usando el código de Java. Puede usted fijar un cierto código para demostrar ¿Cómo usted está abriendo o que maneja la base de datos?

¿Tiene una base de datos pre-poblada y busca integrarla en su aplicación? En caso afirmativo, puede hacerlo con mi biblioteca

En el primer inicio de la aplicación después de la instalación

 SuperDatabase database=new SuperDatabase(getApplicationContext(),"foods.db", AssetDatabaseMode.COPY_TO_SYSTEM); 

En lanzamientos posteriores

 SuperDatabase database=new SuperDatabase(getApplicationContext(),"foods.db", AssetDatabaseMode.READ_FROM_DEVICE); 

Simplemente dispara consultas SQL

 database.sqlInject("INSERT INTO food VALUES('Banana','Vitamin A');"); 

Obtenga resultados en Array en CSV, JSON, XML

 ArrayList<String> rows=new ArrayList<String>(); rows=database.sqlEjectCSV("SELECT * FROM food;"); for (int i=0;i<rows.size();i++) { //Do stuffs with each row } 

Necesitas incluir mi biblioteca para esto. Documentaciones aquí:
https://github.com/sangeethnandakumar/TestTube

  • Necesito un ejemplo de sqlite con Monodroid
  • Aplicación de Android y myBatis
  • ORMLite Seleccionar campos distintos
  • SQLiteAssetHelper - problemas en teléfonos específicos, por ejemplo OnePlus
  • Cómo limitar los datos añadidos por bucle en sqlite android
  • ¿Puede el androide sqlite interfaz ser utilizado fuera de Android
  • Android: ¿necesitamos cerrar Db después de cerrar el cursor
  • Android: copia la base de datos de la carpeta de activos, pero sólo obtiene un archivo vacío
  • Lea el error de la carpeta sqlite from assets
  • Cómo almacenar JSON en SQLite
  • Androide. Proveedor de contenido o base de datos?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.