0

我测试了这段代码,它在 java 中运行良好,并在我的笔记本电脑上编写了一个测试文件,但是无法让它在 android 设备上运行。

我写了一个注释来显示空指针异常在哪里。

当我在几个不同的 android 设备上运行它时,结果是一样的。它在同一行代码中以空指针崩溃。

什么会导致它在 java 桌面应用程序上正常工作并在 android 设备上获得空指针?

有任何想法吗?

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        File makeDirectory = new File("/mnt/testDirectory/");

        // File makeDirectory = new File("C:/testDirectory/"); // when used on
        // java desktop app

        makeDirectory.mkdir();

        File file = new File("/mnt/testDirectory/testfile.txt");

        // File file = new File("C:/testDirectory/testfile.txt"); // when used
        // on java desktop app

        try {
            file.createNewFile();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        PrintStream output = null;
        try {
            output = new PrintStream(new FileOutputStream(file));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        output.print(true); // <----- NULL POINTER EXCEPTION THIS LINE
        output.print((int) 123);
        output.print((float) 123.456);

        output.printf(Locale.UK, "Text + data: %1$", 123);

        output.close();

    }
}

清单 xml 文件中的权限

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

编辑:我刚刚发现了一些额外的信息,所以我不害怕使用 getExternalStorageDirectory() 因为如果我是正确的。所有 Android 设备上都有一些外部存储目录,即使不使用 SD 卡,例如我发现的另一个问题,

"Android will always report one mounted hardware memory (if any available) as External Storage.

That memory can be:

fitted inside the device by manufacturer (internal memory)
can be an sd card (external memory)

从这个问题:

设备要求外部存储,但我没有 SD 卡

4

2 回答 2

1

这是您从外部存储中获取文件的方式:

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), filename);

笔记:

如果您的设备已植根,则可能是这样。mnt 可以工作。我不知道。但是,这是错误的做法。

于 2013-10-02T08:33:54.847 回答
1

咳咳,'/mnt'?根据我遇到的所有教程以及android开发者网站;你需要使用:

Environment.getExternalStorageDirectory() 方法返回一个包含对根存储目录的引用的文件对象。从那里开始;如果你是一个优秀的 Java 程序员,我认为你可以处理剩下的;)

于 2013-10-02T08:37:34.090 回答