copiar la base de datos de los activos a la carpeta de bases de datos

En la actividad principal tengo este método que copia archivos de los assets a la carpeta de las databases :

 try{ // CHECK IS EXISTS OR NOT SQLiteDatabase dbe = SQLiteDatabase.openDatabase("/data/data/com.henanet.dalel/databases/mydb.sqlite",null, 0); dbe.close(); // COPY IF NOT EXISTS AssetManager am = getApplicationContext().getAssets(); OutputStream os = new FileOutputStream("/data/data/com.henanet.dalel/databases/mydb.sqlite"); byte[] b = new byte[100]; int r; InputStream is = am.open("mydb.sqlite"); while ((r = is.read(b)) != -1) { os.write(b, 0, r); } is.close(); os.close(); } catch(Exception e) { } 

Pero una vez que el usuario instala la aplicación, obtiene este error en LogCat:

 09-14 22:57:25.694: I/Database(19903): sqlite returned: error code = 14, msg = cannot open file at source line 25467 09-14 22:57:25.694: E/Database(19903): sqlite3_open_v2("/data/data/com.henanet.dalel/databases/mydb.sqlite", &handle, 2, NULL) failed 

Mi método

Obtenga su ruta de base de datos utilizando la siguiente

 ContextWrapper cw =new ContextWrapper(getApplicationContext()); DB_PATH =cw.getFilesDir().getAbsolutePath()+ "/databases/"; //edited to databases 

Entonces puedes ir de esta manera

 private void copyDataBase() { Log.i("Database", "New database is being copied to device!"); byte[] buffer = new byte[1024]; OutputStream myOutput = null; int length; // Open your local db as the input stream InputStream myInput = null; try { myInput =myContext.getAssets().open(DB_NAME); // transfer bytes from the inputfile to the // outputfile myOutput =new FileOutputStream(DB_PATH+ DB_NAME); while((length = myInput.read(buffer)) > 0) { myOutput.write(buffer, 0, length); } myOutput.close(); myOutput.flush(); myInput.close(); Log.i("Database", "New database has been copied to device!"); } catch(IOException e) { e.printStackTrace(); } }