?
在使用過程中,老是發現複製不成功,私有目錄下的db文件總是3072
?
<span style="color: #ff0000;">[b]後來發現應該是使用ContentProvider的原因,它會先創建一個空的db。[/b]
</span>
<br><img src="http://dl.iteye.com/upload/attachment/598512/8863f1d9-f38b-33f4-8262-dd5692375d79.jpg" alt="">
而我的程序在複製數據庫的時候會判斷私有目錄下是否有數據庫文件,如果有則不復制。
?
現在改爲用SharedPreferences一個字段判斷是否第一次複製。
<span style="color: #ff0000;">第一次複製數據庫的時候就算私有目錄下有db文件,也刪除。</span>
這樣就ok了
?
代碼如下:
public class CopyDataActivity extends Activity{
boolean needCopy = false;
SharedPreferences mSP = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.copy_data);
mSP = getSharedPreferences(Constants.PREFERENCES_NAME, MODE_PRIVATE);
needCopy = mSP.getBoolean("need_copy_data", true);
if(needCopy){
handler.post(copyPlanThread);
}else{
goToMain();
}
}
private void goToMain(){
mSP.edit().putBoolean("need_copy_data", false).commit();
startActivity(new Intent(CopyDataActivity.this,LoginActivity.class));
this.finish();
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int what = msg.what;
int arg1 = msg.arg1;
if(what==1){
//這裏可以在頁面顯示覆制進度什麼的
Log.e("Copy","複製大小:"+arg1);
}else{
goToMain();
mSP.edit().putBoolean("need_copy_data", false).commit();
}
}
};
Runnable copyPlanThread = new Runnable() {
@Override
public void run() {
try{
copyDatabase();
}catch(Exception e){
e.printStackTrace();
}
}
};
private void copyDatabase() throws Exception{
Log.e("Copy","copy start");
File dbfile = new File(getFilesDir().getAbsolutePath() +File.separator+ "mydb.db";
File dir = dbfile.getParentFile();
if(dir.exists() == false){
dir.mkdirs();
}
//把contentprovider生成的db刪除
if(dbfile.exists()){
dbfile.delete();
}
InputStream is = this.getResources().openRawResource(R.raw.library);
FileOutputStream fos = new FileOutputStream( dbfile);
byte[] buffer =new byte[1024];
int size = 0;
int length = 0; //字節
while( (length= is.read(buffer)) > 0){
fos.write(buffer,0,length);
size += length;
Message msg = new Message();
msg.what = 1;
msg.arg1 = size;
handler.sendMessage(msg);
}
fos.flush();
fos.close();
is.close();
Log.e("Copy","copy end");
Message msg = new Message();
msg.what = 0;
msg.arg1 = 0;
handler.sendMessage(msg);
}
}
?
?
?
<ul style="display:none;">
[*][url=http://dl.iteye.com/upload/attachment/598512/8863f1d9-f38b-33f4-8262-dd5692375d79.jpg]<img src='http://dl.iteye.com/upload/attachment/598512/8863f1d9-f38b-33f4-8262-dd5692375d79-thumb.jpg' class='magplus' title='點擊查看原始大小圖片' />[/url]
[*]大小: 14.3 KB
</ul>
[list]
[*][url=#]查看圖片附件[/url]
[/list]