Не видя вашего адаптера базы данных, я не могу быть уверен, однако, скорее всего, он не сработает с первого раза, потому что вы пытаетесь скопировать БД до того, как каталог существует.
Обычно адаптер базы данных создает базу данных, если она не существует. Это создаст каталог «Базы данных». Таким образом, когда вы открываете только что установленное приложение, каталог не существует и копирование не выполняется. Однако сразу после логики копирования вы создаете адаптер db, и он (вероятно) создает базу данных db (и каталог, в котором она содержится). Следовательно, при втором запуске копирование завершается успешно.
Это должно работать так, как вы хотели бы (порядок важен):
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
db=new DBAdapter(this);
db.open();
String destPath="/data/data/"+getPackageName()+"/databases/cryptdb2zx";
File f=new File(destPath);
File f2=new File("emptyfile");
if(!f2.exists()){
//do nothing
{
try {
Log.w("akash", "file does not exist");
CopyDB(getBaseContext().getAssets().open("cryptdb2"),new FileOutputStream(destPath));
f2.createNewFile();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}