【发布时间】:2011-06-12 16:53:34
【问题描述】:
我正在尝试将我的应用程序中的一些数据保存在内部私人存储区域(应用程序用户首选项)上的一个简单文本文件中。我已经阅读了这里(StackOverflow)上的许多问题,并尝试了建议的解决方案,但没有成功。似乎最简单的解决方案是这里建议的解决方案:
http://developer.android.com/guide/topics/data/data-storage.html#filesInternal
但我无法在我的测试设备上使用它。我还尝试使用 java.io.File 中可用的方法和适当的方法来创建文件。我也尝试在 SDCard 上创建文件,结果相同,失败。我已经尝试了其他答案中列出的许多解决方案,完全按照建议的代码和说明找到了相同的结果。我开始觉得我缺少一些重要的代码,或者某处的设置标志,我已经在清单文件中设置了权限:
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
明确地说,我正在尝试写入设备的内部私有存储。它是一个包含姓名、电话号码和几个int 类型标志的小文件。无论我使用什么方法,我要么发现文件没有创建(或者如果我将文件手动放在 SDCard 上会发生更改),或者当我尝试引用文件或文件位置时出现 NullPointerException:
private File fILE = new File("Mydata", main.FILENAME);
或
private File fILE = getDir("Mydata", 0);
我正在使用 Sprint 的最新服务版本更新的 HTC Hero 上运行代码。任何帮助将不胜感激,在此先感谢!
-史蒂夫
更新 (2/2/11):使用 EVO (API 8) 我仍然得到 NullPointerException。生成异常的代码如下,关于为什么我的应用程序无法访问内部存储的任何想法?我在使用两个 API 级别(API 7 和 8)的三个不同物理设备上遇到了这个问题。
File newfile = new File(this.getFilesDir() + "/data/files/", "sample.txt");
更新 2:2/4/11 - 我发现在任何情况下我都看不到物理设备(数据目录)上的文件结构。有人对此有任何想法吗?设备配置正确,可以从eclipse或adb运行app。
更新 3:(2/9/11) - 我想我可能已经找到了问题所在,但我不确定如何处理它。我发现物理设备上/data/目录的权限是:drwxrwx--x。我不确定为什么会这样,也许与Sprint有关?我在 Sprint 上的 HTC Hero、Samsung Epic (Galaxy S) 和 HTC EVO 上发现了这种方式。问题似乎是 DDMS 和我的应用程序没有对目录的 r/w 访问权限。我需要在这里弄清楚两件事,为什么会这样以及如何在野外解决这个问题。同样,这里的任何帮助都会很棒!
更新 4:我认为去年 2 月对我来说完全是金发碧眼的时刻(见更新 3)。我拥有的测试设备未经过 ROOT,因此无法访问(DUH!)。在他 SGS 和 EVO 4G 经历了所有的更新之后,结果还是一样。我仍在解决这个问题,并会尝试尽快返回这里进行更新(希望下次不到一年)。
【问题讨论】:
-
您在尝试这些不同的方法时收到错误消息还是只是默默地失败了?
-
我现在正专注于
openFileOutput()方式,我得到了 NullPointerException。手机上的私人数据目录好像被锁定了,我什至无法查看目录;它就像什么都没有在那里创造。手机上“data”目录的权限为:“drwxrwx--x”。我开始怀疑手机上是否存在无效设置。为了兼容性,数据文件写入内部存储是应用程序的要求。 -
除非您具有 root 访问权限,否则您将无法使用 DDMS 访问物理设备上的 /data 目录,但您仍然应该能够从应用程序写入文件。模拟器上会发生什么?你能写个文件好吗?
-
我可以使用模拟器上的 File 类编写好的。这很奇怪,我应该在手机上拥有 root 访问权限,不是吗?
-
除非您
root操作系统,否则您将无法在真实设备上获得 root 访问权限。我不建议这样做。我有一部 Google Dev Phone 2,甚至没有 root 访问权限。您可以从 Logcat 发布堆栈跟踪吗?它在模拟器上运行但在你的任何设备上都不起作用是没有意义的。