簡體   English   中英

制作Android數據庫副本

[英]Making a copy of Android database

我一直在嘗試創建應用程序數據庫的副本並將其保存到手機的根目錄,但是沒有運氣。 我的日志去了:

第一步

步死

顯然if (sd.canWrite())是第一個錯誤嗎? 有人能幫忙嗎? 我的想法不多了。 謝謝

public void save() {


        File data = Environment.getDataDirectory();
        File sd = new File(Environment.getExternalStorageDirectory().toString());
        sd.mkdirs();
        Log.d("XXXXXXXXXXXXXXXXXXX", "STEP ONE");
        if (sd.canWrite()) {
            Log.d("XXXXXXXXXXXXXXXXXXX", "STEP TWO");
            String currentDBPath = "/data/com.test.example/databases/example_db";
            String backupDBPath = "/mytest" + "version_two" + ".db";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);
            Log.d("XXXXXXXXXXXXXXXXXXX", "STEP THREE");
            if (currentDB.exists()) {
                Log.d("XXXXXXXXXXXXXXXXXXX", "STEP FOUR");
                FileChannel src;
                try {
                    Log.d("XXXXXXXXXXXXXXXXXXX", "STEP FIVE");
                    src = new FileInputStream(currentDB).getChannel();
                    FileChannel dst = new FileOutputStream(backupDB)
                            .getChannel();
                    try {
                        Log.d("XXXXXXXXXXXXXXXXXXX", "STEP SIX");
                        dst.transferFrom(src, 0, src.size());
                        src.close();
                        dst.close();
                    } catch (IOException e) {
                        Log.d("XXXXXXXXXXXXXXXXXXX", "STEP ONE DEAD");
                        e.printStackTrace();
                    }
                } catch (FileNotFoundException e) {
                    Log.d("XXXXXXXXXXXXXXXXXXX", "STEP TWO DEAD");
                    e.printStackTrace();
                }
            }
        }else{
            Log.d("XXXXXXXXXXXXXXXXXXX", "STEP DEAD");
        }

    }

我清單的片段-我不知道android:allowBackup="true"到達那里

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity

在仿真器輸出上:

01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP ONE
01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP DEAD

在設備輸出上:

01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP ONE
01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP TWO
01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP THREE
01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP FOUR
01-13 14:16:13.082: D/XXXXXXXXXXXXXXXXXXX(30105): STEP FIVE
01-13 14:16:13.090: D/XXXXXXXXXXXXXXXXXXX(30105): STEP SIX
 File sd = new File(Environment.getExternalStorageDirectory().toString());

好吧,由於Environment.getExternalStorageDirectory()返回了一個File,因此您無需創建新實例,可以通過以下方式進行更改:

 File sd = Environment.getExternalStorageDirectory();
  • sd.mkdirs(); 肯定會失敗,因為您沒有在//mnt內寫權限,而且sd指向的目錄也應該已經退出
  • 寫入權限WRITE_EXTERNAL_STORAGE :您是否WRITE_EXTERNAL_STORAGE其添加到AndroidManifex文件中? 由於您忘記添加權限,canWrite()可能返回false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM