Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 复制Android数据库_Java_Android_Database_Android Sqlite - Fatal编程技术网

Java 复制Android数据库

Java 复制Android数据库,java,android,database,android-sqlite,Java,Android,Database,Android Sqlite,我一直在尝试创建应用程序数据库的副本并将其保存到手机的根目录中,但没有成功。我的日志如下: 第一步 步进停止 显然if(sd.canWrite())是第一个错误吗?有人能帮忙吗?我的点子快用完了。谢谢 public void save() { File data = Environment.getDataDirectory(); File sd = new File(Environment.getExternalStorageDirectory().toStr

我一直在尝试创建应用程序数据库的副本并将其保存到手机的根目录中,但没有成功。我的日志如下:

第一步

步进停止

显然
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”是如何到达那里的

在设备输出上:

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
由于Environment.getExternalStorageDirectory()返回一个文件,您不需要创建新实例。您可以通过以下方式更改它:

 File sd = Environment.getExternalStorageDirectory();
  • sd.mkdirs()
    肯定会失败,因为您在
    /
    /mnt
    中没有写入权限,而且
    sd
    指向的目录应该已经存在
  • 写入权限-
    写入外部存储
    :是否将其添加到AndroidManifex文件中?可能是因为您忘记添加权限,所以canWrite()返回false

这可能会有所帮助:还有这一点:。您不也应该指定一个文件名吗?看起来您只是在使用目录来创建文件。嗯。。。我只是添加了它,我认为它会起作用,但仍然没有任何效果。有什么想法吗?我还是第一步然后就死了。伯格。。。还有其他想法吗?但是你的手机里有SD卡吗?我正在模拟器上试着。。。这是我的问题吗?哦,不,我早该知道的。我现在就去试试。是的,它在实际设备上起作用了。非常感谢您和我一起解决这个问题。我很感激。
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());
 File sd = Environment.getExternalStorageDirectory();