1

当我尝试访问数据文件夹时,我在 android 设备监视器中注意到,因此我可以提取在我的物理手机上运行的应用程序的 sql 文件,它不起作用,但是当通过模拟器访问应用程序时它确实有效。显然,在模拟器上运行应用程序要耗费更多时间,我需要在定时 viva 中呈现这个 sqlite 数据,所以我真的不能等待模拟器。

我想知道为什么会发生这种情况,因为我已允许调试,虽然它不再要求对安全性进行任何检查,但设备监视器不会打开数据文件夹,当单击文件夹旁边的箭头时会消失,然后在几秒钟后重新出现但是我仍然可以通过旁边的下拉箭头访问所有其他文件夹。

4

1 回答 1

0

如果您的设备未植根,您将无法访问应用程序的数据文件。尝试在您的任何文件中使用以下代码段Activity将文件复制到 sdcard。

public static void copyDataFile() {
    File dataDir = getFilesDir().getParentFile();
    File target = new File(dataDir, "/* relative path to your sql file */");
    File out = new File(Environment.getExternalStorageDirectory(), "/* new file name */");
    copyFile(target, out);
}

public static void copyFile(File in, File out) {
    if (in.exists()) {
        if (!out.exists()) {
            try {
                out.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        FileInputStream is = null;
        FileOutputStream os = null;
        try {
            is = new FileInputStream(in);
            os = new FileOutputStream(out);
            byte[] buf = new byte[4096];
            int l = 0;
            while ((l = is.read(buf)) > 0) {
                os.write(buf, 0, l);
            }
            os.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (is != null) {
                    is.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (os != null) {
                    os.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
于 2016-04-01T02:12:20.320 回答