安卓提示无法解析方法'getExternalFilesDir(null)'

16

我正在使用Android Studio尝试将文件写入外部存储。其他帖子建议我使用getExternalFilesDir(null)来实现,但我收到了消息Cannot resolve method 'getExternalFilesDir(null)'

 public void makeFile() {
    try {
        String storageState = Environment.getExternalStorageState();
        if (storageState.equals(Environment.MEDIA_MOUNTED)) {
            File file = new File(getExternalFilesDir(null), "outputFile.txt");
            FileOutputStream fos = new FileOutputStream(file);
            String text = "Hello, world!";
            fos.write(text.getBytes());
            fos.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我一直无法找到解决这个错误的方法。感谢提前为问题提供的任何解决方案。


1
getExternalFilesDir 方法来自于 Context 类,需要一个上下文对象才能在非 Context 子类的普通 Java 类中调用它。 - ρяσѕρєя K
1个回答

57

getExternalFilesDir() 是一个需要 Context 参数的方法。在 Activity 类中,只需要调用getExternalFilesDir() 方法即可,但在其他类中,需要使用 Context 参数来调用该方法。

例如:

  • 在 Fragment 中使用 getActivity().getExternalFilesDir(null) 方法

  • 在其他类中,传递 Context 参数并调用 context.getExternalFilesDir(null) 方法

  • 在 Activity 的内部类中调用时,使用 YourActivity.this.getExternalFilesDir(null); 语句


我尝试将Context作为参数传递,但Android现在说这行代码File file = new File(context.getExternalFilesDir(null), "outputFile.txt");是“不是语句”。 - Olivia Watkins
@OliviaWatkins,你能展示一下你的完整代码(类)吗? - Damian Kozlak
1
我找到了问题 - 我把一对括号放错了位置。现在使用 context.getExternalFilesDir(null) 就可以了,谢谢。 - Olivia Watkins
1
谢谢。MainActivity.this.getExternalFilesDir(null) 返回 /storage/emulated/0/Android/data/com.example.k.myapplication/files - gimmegimme
我是个白痴。谢谢你那简单明了的答案。 - xTwisteDx
如果我想要将文件夹放在根目录而不是我的应用程序中,因为当应用程序被卸载时,所有数据也会被删除,有什么替代方法吗? - Sunil Chaudhary

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