0

このコードをテストしたところ、Java で正常に動作し、ノートブック コンピューターにテスト ファイルを書き込みますが、これを Android デバイスで動作させることはできません。

ヌルポインター例外がどこにあるかを示すためにメモを入れました。

これをいくつかの異なるAndroidデバイスで実行すると、結果は同じです。同じコード行で null ポインターを使用してクラッシュします。

これが Java デスクトップ アプリケーションでエラーなしで動作し、Android デバイスで null ポインタを取得する原因は何ですか?

何か案は?

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

えっと、「/mnt」?私が遭遇したすべてのチュートリアルと、Android開発者のWebサイトによると; 以下を使用する必要があります。

ルート ストレージ ディレクトリへの参照を含む File オブジェクトを返す Environment.getExternalStorageDirectory() メソッド。そこから。あなたが優れた Java プログラマーなら、残りの部分は処理できると思います ;)

于 2013-10-02T08:37:34.090 に答える
1

これは、外部ストレージからファイルを取得する方法です。

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

ノート:

デバイスがルート化されている場合があります。mnt が機能する可能性があります。何も思いつきません。しかし、それは間違ったアプローチです。

于 2013-10-02T08:33:54.847 に答える