-1

これは私のコードです。関数 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)
4

3 に答える 3

1

コードにエラーがあり、実行できるかどうか疑問です。変数ファイル (File) は、宣言されているため返すことができません。範囲外です。

次のように変更してみてください。

try {
     File file = new File(storageLocation, getFileName()+".xml");
     file.createNewFile();
     return file;
}
catch( IOException e){
    e.printStackTrace();
}
return null;
于 2013-05-04T10:40:13.203 に答える
0

getFileName() で使用したカレンダー オブジェクトを初期化しましたか?

于 2013-05-04T09:53:20.260 に答える
0

関連する権限を追加しましたか:

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

マニフェスト ファイルで、外部ストレージに書き込むには?

于 2013-05-04T09:34:32.700 に答える