シリアル化されたオブジェクトをファイルに保持しているアプリがあります。「adb backup」を使用してバックアップしようとすると、フレームワークで NULL ポインター例外が発生します。私のコードに何か問題があると思います。
mFileOutputStream = mContext.openFileOutput(vfile, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(mFileOutputStream);
oos.writeObject( smsBackup );
oos.flush();
oos.close();
mFileOutputStream.close();
smsBackup は、デバイス上のすべてのメッセージのコピーを保持するオブジェクトです。私が知る限り、オブジェクトをシリアル化する方法に問題はないようです。adb backup を発行すると、制御は
void onFullBackup(FullBackupDataOutput data){
BackupSMS smsBackup = new QualcommBackupSMS(this, SMS);
smsBackup.performBackup(); //Above snippet is implemented as part of this.
super.onFullBackup(data); //Exception is coming here.
}
このメソッドは、BackupAgent の上でオーバーライドされます。
スタックトレースは次のとおりです。
D/BackupServiceBinder(1268): java.lang.NullPointerException
D/BackupServiceBinder(1268): at android.os.Parcel.readException(Parcel.java:1467)
D/BackupServiceBinder(1268): at android.os.Parcel.readException(Parcel.java:1415)
D/BackupServiceBinder(1268): at android.os.storage.IMountService$Stub$Proxy.mkdirs(IMountService.java:750)
D/BackupServiceBinder(1268): at android.app.ContextImpl.ensureDirsExistOrFilter(ContextImpl.java:2160)
D/BackupServiceBinder(1268): at android.app.ContextImpl.getExternalFilesDirs(ContextImpl.java:856)
D/BackupServiceBinder(1268): at android.app.ContextImpl.getExternalFilesDir(ContextImpl.java:839)
D/BackupServiceBinder(1268): at android.content.ContextWrapper.getExternalFilesDir(ContextWrapper.java:210)
D/BackupServiceBinder(1268): at android.app.backup.BackupAgent.onFullBackup(BackupAgent.java:297)
D/BackupServiceBinder(1268): at com.qualcomm.backupagent.BackupAgent.onFullBackup(QualcommBackupAgent.java:79)
この問題に関するいくつかの調査から、Parcel.readException からこの NullPointerException (など) が見つかりましたが、それ以上のものはありませんでした。この同じルーチンを使用して、シリアライゼーションが関与していないファイルを問題なくバックアップしました。これにより、例外の原因が何らかの形でシリアライゼーションに関連していると思われます。この NullPointerException をどこから探し始めることができるかについての手がかりはありますか?
PS: 私はコード内の例外の原因を見つけるのに多くの時間を費やしましたが、必死になってここに質問を出しています。公正な戦いをせずに質問を出していると誰かが思った場合に備えて.