对于一些用户,getExternalFilesDir(null)返回null

5

我的问题是下面这个:

对于我应用程序的某些用户来说,下面这行代码会抛出NullPointerException异常,但我不知道为什么。

String state = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(state))
    baseDir = getExternalFilesDir(null).getAbsolutePath();
else
    baseDir = getFilesDir().getAbsolutePath();

更具体地说,它是这部分:

要更好的说明,就是这一部分

baseDir = getExternalFilesDir(null).getAbsolutePath();

这段代码在OnPostCreate()中被调用,我也拥有所需的权限,以防你想知道。

但是,getExternalFilesDir(null)由于某种原因返回null,即使它已经挂载了。

我还在SO上搜索了一下,并找到了一个相关的帖子,提出了同样的问题,但没有真正的答案,唯一好的答案是这个

那么,这只是某些用户手机上的问题,还是Android的总体问题?

1个回答

6

这很奇怪。Android文档说只有在外部存储没有挂载时才会返回null。我认为正确的做法是:

String state = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(state)) {
    File baseDirFile = getExternalFilesDir(null);
    if(baseDirFile == null) {
        baseDir = getFilesDir().getAbsolutePath();
    } else {
        baseDir = baseDirFile.getAbsolutePath();
    }
} else {
    baseDir = getFilesDir().getAbsolutePath();
}

嗯,我认为这基本上是唯一的解决方案。但是了解为什么会发生这种情况可能会很有趣。我唯一的假设是这取决于制造商的实现方式。 - DokutoMekki
我也遇到过这个问题,但是对我来说,它是零星发生的,并不取决于用户。我认为这是操作系统内部的时序问题,但我还没有能够重现它,因此我无法提交错误报告。 - FractalBob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接