此活动的作用是将数据库从assets文件夹复制到应用程序数据库文件夹(如果应用程序正在运行第一个应用程序)。但是数据库仅在应用程序第二次运行后才会被复制!
package fifth3.sem;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
@SuppressWarnings("unused")
public class Splash extends Activity {
static DBAdapter db;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
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();
}
}
}
db=new DBAdapter(this);
db.open();
Thread t=new Thread(){
public void run()
{
try{
for(int i=0;i<5;i++){
Thread.sleep(1000);
}
}
catch(Exception e){
}
finally{
startActivity(new Intent("login.screen"));
}
}
};
t.start();
}
public void CopyDB(InputStream inputStream,OutputStream outputStream)throws IOException{
Log.w("akash", "copying");
byte[] buffer=new byte[1024];
int length;
while((length=inputStream.read(buffer))>0){
outputStream.write(buffer,0,length);
}
inputStream.close();
outputStream.close();
Log.w("akash", "copied");
}
}
答案 0 :(得分:0)
在没有看到您的数据库适配器的情况下,我无法确定,但是它可能在第一次不起作用,因为您尝试在目录存在之前复制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();
}
}
}
}