Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
Android DDMS文件资源管理器可以';t访问数据\数据(HTC Desire HD)_Android_Sqlite_Ddms - Fatal编程技术网

Android DDMS文件资源管理器可以';t访问数据\数据(HTC Desire HD)

Android DDMS文件资源管理器可以';t访问数据\数据(HTC Desire HD),android,sqlite,ddms,Android,Sqlite,Ddms,我正在编写一些SQLite代码,希望检查数据库。如果我在emulator上运行代码,我可以使用DDMS文件管理器从data\data\myProject\数据库中提取文件,但如果我在实际硬件上运行,则无法访问data\data文件夹。除了获得对手机的根访问权限之外,还有其他方法吗?SQLIte数据库实际上只是一个存储在手机内存中的文件,您可以将其复制到手机SD卡,然后从PC轻松访问。下面是一个功能,它正是您所需要的。只需确保在使用函数之前更改包名和数据库名 public static void

我正在编写一些SQLite代码,希望检查数据库。如果我在emulator上运行代码,我可以使用DDMS文件管理器从data\data\myProject\数据库中提取文件,但如果我在实际硬件上运行,则无法访问data\data文件夹。除了获得对手机的根访问权限之外,还有其他方法吗?

SQLIte数据库实际上只是一个存储在手机内存中的文件,您可以将其复制到手机SD卡,然后从PC轻松访问。下面是一个功能,它正是您所需要的。只需确保在使用函数之前更改包名和数据库名

public static void backupdatebase()引发IOException{
//打开本地数据库作为输入流
字符串inFileName=“/data/data/your.package.name/databases/database.sqlite”;
File dbFile=新文件(inFileName);
FileInputStream fis=新的FileInputStream(dbFile);
字符串outFileName=Environment.getExternalStorageDirectory()
+“/database.sqlite”;
//打开空数据库作为输出流
OutputStream output=新文件OutputStream(outFileName);
//将字节从输入文件传输到输出文件
字节[]缓冲区=新字节[1024];
整数长度;
而((长度=fis.read(缓冲区))>0){
输出.写入(缓冲区,0,长度);
}
//关闭溪流
output.flush();
output.close();
fis.close();
}
从代码中可以看出,数据库始终存储在以下文件夹中:

/data/data/your.package.name/databases/

名称(在我们的示例“database.sqlite”中)是您在扩展SQLiteOpenHelper时选择的名称。显然,您还需要将“your.package.name”替换为应用程序包的名称。

我相信您的应用程序可以更改其本地存储数据文件的unix权限,以便其他应用程序和adb可以访问这些文件

但是,您的应用程序无法更改对受保护手机的/data目录缺少列表权限的情况


因此,,您必须使用“adb pull/full/path/to/file”来获取文件-您无法浏览到它,因为您无法生成文件的/数据列表或可能的其他几个中间目录父目录。

真正解决这一问题的唯一方法是将您的文件放在一个可以在SD卡上访问的位置发展。然后,一旦你满意的事情是正确的工作,把文件放在任何你想要的地方

我这么说是因为我有零售版的NexusOne和开发者版的NexusOne。在使用DDMS文件资源管理器时,我注意到我可以在开发人员设备上浏览数据文件夹,但在零售设备上却无法。我在我的零售设备上安装了根,但没有任何帮助


所以我想在这个问题上还需要做更多的研究。但在此之前,我希望这能有所帮助。

使用

cp /data/data/<packagename>/databases/<dbname>/<filename> /mnt/sdcard 
cp/data/data///databases///mnt/sdcard
使用adb,然后使用从/mnt/sdcard复制到桌面

adb pull /mnt/sdcard/<filename> 
adb pull/mnt/sdcard/

然后使用sqlite3查看它

您必须为设备设置根目录。转到命令提示符并转到adb所在的位置

e、 g

C:\Program Files\Android\Android sdk\platform tools


键入
adb根目录
。现在转到您的文件资源管理器并检查。

您必须为您的手机设置根目录。您必须是根目录才能通过浏览来完成此操作,但该程序可以更改文件的权限,使其可以通过其完整路径名访问。对于我们这些没有根目录手机的人来说,这是一项很好的技术。只需确保添加权限WRITE\u EXTERNAL\u存储,否则它将无法工作。它在我的异常处理程序中被捕获,所以我错过了。嗨,我确实尝试过,但我真的看不到数据文件在哪里?我使用的是windows,我的android文件存储在工作区下,但我的软件包下没有数据文件