我再一次提出了一个问题,这个问题已经被问过并在之前得到了解答,但在我的实施中,它仍然无效。
我在主要活动的onCreate方法的最开始就调用了getExternalFilesDir(null)。它每次都返回null,无论是在AVD中运行还是在我的手机上运行(Samsung Galaxy Plus)。
是的,我的AndroidManifest.xml中有<uses-permission android:name="android.permissions.WRITE_EXTERNAL_STORAGE" />
行,是的,我在拨打电话之前检查外部存储状态并挂载。
这是我的onCreate()方法中的前三行。实际上,它只是在super.onCreate()和setContentView()调用之后。
String state = Environment.getExternalStorageState();
File extFiles = getExternalFilesDir(null);
File locFiles = getFilesDir();
因此,一旦执行了这三行,这些就是变量的值:
state == "mounted"
extFiles == null
locFiles == "/data/data/com.mypackage.name/files"
谁会有任何想法,为什么这可能是?
- - -编辑 - - -
所以我尝试了另一种方法;我尝试使用getExternalFilesDir(null)
,而不是使用File basePath = new File(Environment.getExternalStorageDirectory(), "myAppName");
这不是理想的,我知道Android文档说,我同意它,你应该使用getExternalFilesDir()
。虽然我不得不尝试别的东西,但这看起来并不适合我。这次函数确实返回一个有效的File对象,因此,在上面一行之后,basePath的路径是/ mnt / sdcard / myAppName。到现在为止还挺好。当我用DDMS检查时,我可以看到/ mnt / sdcard存在但不是/ mnt / sdcard / myAppName。这是可以预料的。所以我打电话给boolean result = basePath.mkdirs();
但这会返回false,当我检查文件系统时,我可以确认尚未创建myAppName子文件夹。当我通过DDMS手动创建文件夹并将文件放入其中时,我可以从我的应用程序中读取这些文件,但我无法在该文件夹中写入任何内容。
请帮忙!我的智慧结束了。
如果你发布问题时这不是拼写错误,你可能会因此而讨厌自己:
<uses-permission android:name="android.permissions.WRITE_EXTERNAL_STORAGE" />
应该
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
这是来自Android文档:
返回在外部存储上保存应用程序文件的目录的路径。如果当前未安装外部存储,则返回null,因此无法确保路径存在;您需要在可用时再次调用此方法。
另一个选项是您可以检查外部存储是否可用:
String state = Environment.getExternalStorageState();
File filesDir;
// Make sure it's available
if (Environment.MEDIA_MOUNTED.equals(state)) {
// We can read and write the media
filesDir = getExternalFilesDir(null);
} else {
// Load another directory, probably local memory
filesDir = getFilesDir();
}
删除一行
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
在AndroidManifest.xml
。
在eclipse中使用“Permission”选项卡将xml编辑器切换为“Android Manifest Permissions”,并添加一个
uses-permission "android.permission.WRITE_EXTERNAL_STORAGE"
点击一下。
然后尝试运行您的应用程序
看来eclipse(可能取决于版本或状态或设置的差异)可以忽略qazxsw poi中直接xml描述的一些词。
谢谢你的建议。你是对的,我的回答似乎在小谈中同意。
我的问题是我打开了一个FileOutputStream,然后在关闭FileOutputStream之前,我打开了一个FileInputStream来查看文件中已有的内容。
我在FileOutputStream打开之前将FileInputStream打开并修复了我的问题。