これは私のコードです。関数 writeFile() で NPE を取得しています。ポイントは、文字列を writeFile() メソッドに渡し、次に createFile() を使用してファイルを作成し、新しく作成されたファイルに文字列を書き込むことです。
ファイルはディレクトリに正常に作成されましたが、何も書き込まれていません。String は Logcat にも出力を表示するため、空の文字列ではないことは明らかです。
public File createFile( ){
File storageLocation = new File( Environment.getExternalStorageDirectory(), path);
storageLocation.mkdirs();
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
Toast.makeText(context, "Cannot use storage.", Toast.LENGTH_SHORT).show();
}
try{
File file = new File(storageLocation, getFileName()+".xml");
file.createNewFile();
}
catch( IOException e){
e.printStackTrace();
}
return file;
}
public String getFileName( ){
SimpleDateFormat sdf = new SimpleDateFormat("dd-mm-yyy",Locale.UK);
return sdf.format(c.getTime( ));
}
public void writeFile( String text ){
try{
line 56>> FileOutputStream fos = new FileOutputStream( createFile( ).getAbsoluteFile());
out = new DataOutputStream(fos);
out.writeUTF(text);
Toast.makeText(context.getApplicationContext(), "Backup Successfull.", Toast.LENGTH_LONG).show();
out.close();
}
catch( IOException e){
e.printStackTrace();
Toast.makeText(context.getApplicationContext(), "Backup Failed.", Toast.LENGTH_LONG).show();
}
catch( NullPointerException e){
e.printStackTrace();
Toast.makeText(context.getApplicationContext(), "Backup Failed.", Toast.LENGTH_LONG).show();
}
}
編集:権限は次のように設定されています
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Logcat からのログは次のとおりです。
05-04 09:21:47.276: W/System.err(1137): java.lang.NullPointerException
05-04 09:21:47.286: W/System.err(1137): at com.codepalette.ceeq.FileManager.writeFile(FileManager.java:56)
05-04 09:21:47.286: W/System.err(1137): at com.codepalette.ceeq.BackupManager.backCallLogs(BackupManager.java:50)
05-04 09:21:47.286: W/System.err(1137): at com.codepalette.ceeq.BackupManager.takeBackup(BackupManager.java:25)
05-04 09:21:47.296: W/System.err(1137): at com.codepalette.ceeq.Home$2.onClick(Home.java:154)