getExternalFilesDir(null)返回零

问题描述 投票:18回答:4

我再一次提出了一个问题,这个问题已经被问过并在之前得到了解答,但在我的实施中,它仍然无效。

我在主要活动的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手动创建文件夹并将文件放入其中时,我可以从我的应用程序中读取这些文件,但我无法在该文件夹中写入任何内容。

请帮忙!我的智慧结束了。

android
4个回答
30
投票

如果你发布问题时这不是拼写错误,你可能会因此而讨厌自己:

<uses-permission android:name="android.permissions.WRITE_EXTERNAL_STORAGE" />

应该

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


14
投票

这是来自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();
}

0
投票

删除一行

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描述的一些词。


谢谢你的建议。你是对的,我的回答似乎在小谈中同意。


0
投票

我的问题是我打开了一个FileOutputStream,然后在关闭FileOutputStream之前,我打开了一个FileInputStream来查看文件中已有的内容。

我在FileOutputStream打开之前将FileInputStream打开并修复了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.