このコードをテストしたところ、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)
この質問から: