如何将我的android上的数据库拉到桌面上?

Jul*_* A. 6 database android location pull nexus-one

我正在尝试使用我的Nexus One.我有android SDK并使用了命令adb pull /data/data/com.myapp.android/databases C:\ pulls但我得到的只是拉:建立文件列表... 0文件拉.跳过0个文件.此外,无论我在我安装的教程NotePad应用程序中添加了多少数据,应用程序的数据大小(如设置中所示)都不会超过8KB.这怎么可能?是否存在存储数据库的其他位置?当我在Eclipse中使用文件资源管理器视图(这是ADT的一部分)时,我发现/ data中没有任何内容.要添加扭曲,我可以毫不费力地从设备中提取任何其他文件.这只是我遇到麻烦的数据库.我错过了什么吗?非常感谢.

dha*_*g23 10

除非您的手机已植根,否则无法访问内部存储空间.一种简单的方法是使用模拟器,然后您可以获取文件.为了从设备上获取数据库,我编写了一个小实用程序并为其添加了一些调试UI:

private void backupDb() throws IOException {
    File sd = Environment.getExternalStorageDirectory();
    File data = Environment.getDataDirectory();

    if (sd.canWrite()) {

        String currentDBPath = "/data/com.yourcompany.yourapp/databases/yourapp.db";
        String backupDBPath = "/yourapp_logs/yourapp.db";

        File currentDB = new File(data, currentDBPath);
        File backupDB = new File(sd, backupDBPath);

        if (backupDB.exists())
            backupDB.delete();

        if (currentDB.exists()) {
            makeLogsFolder();

            copy(currentDB, backupDB);
       }

        dbFilePath = backupDB.getAbsolutePath();
   }
}

 private void makeLogsFolder() {
    try {
        File sdFolder = new File(Environment.getExternalStorageDirectory(), "/yourapp_logs/");
        sdFolder.mkdirs();
    }
    catch (Exception e) {}
  }

private void copy(File from, File to) throws FileNotFoundException, IOException {
    FileChannel src = null;
    FileChannel dst = null;
    try {
        src = new FileInputStream(from).getChannel();
        dst = new FileOutputStream(to).getChannel();
        dst.transferFrom(src, 0, src.size());
    }
    finally {
        if (src != null)
            src.close();
        if (dst != null)
            dst.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您的代码看起来很好,但我的Eclipse无法识别副本(currentDB,backupDB); 指令.您是否安装了一些额外的库(.jar)来使用复制方法? (2认同)