ここに投稿するのは初めてなので、お手柔らかに!
omw.data を読み取るメソッドを作成しようとすると、SavedSession オブジェクトがファイルに既に存在するかどうかが確認されます。存在する場合は無視し、それ以外の場合はファイルの末尾に追加します。
オブジェクトを 1 つ追加できます。同じ SavedSession を追加すると、既に追加されていると正しく動作します。別のタイプの SavedSession を追加すると、追加されたと表示されますが、omw.data を読み込もうとするとスローされます
java.io.StreamCorruptedException: 間違った形式: ac
SavedSession は GeoPoint オブジェクトを保持せず、代わりにそれを使用して緯度と経度を取得します。
どんな助けでも感謝します。私は検索を試み、かなりの数の異なる方法を試しましたが、問題が何であるかを正確に理解していませんでした.
ありがとうございます。何か不足している場合はお知らせください。すぐに掲載します。
public void saveDestination(GeoPoint to, String message,
List<String> contactNumbers) throws IOException {
SavedSession newSession = new SavedSession(to, message, contactNumbers);
FileOutputStream fos = c.openFileOutput("omw.data", Context.MODE_APPEND);
fos.close();
FileInputStream fis = c.openFileInput("omw.data");
try {
ObjectInputStream ois = new ObjectInputStream(fis);
List<SavedSession> previousSessions = new LinkedList<SavedSession>();
try {
Object prevSession = null;
while ((prevSession = ois.readObject()) != null) {
previousSessions.add((SavedSession) prevSession);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch(EOFException ex){
System.out.println("End of file reached found: " + previousSessions.size());
}
finally {
System.out.println("ois closed");
ois.close();
}
if (previousSessions.contains(newSession)) {
Toast.makeText(c, "Already contained!", Toast.LENGTH_LONG)
.show();
return;
}
} catch (EOFException ex) {
ex.printStackTrace();
}
fos = c.openFileOutput("omw.data", Context.MODE_APPEND);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(newSession);
oos.flush();
oos.close();
Toast.makeText(c, "Added Item", Toast.LENGTH_LONG).show();
}
エラー
03-03 01:56:27.452: W/System.err(3631): java.io.StreamCorruptedException: Wrong format: ac
03-03 01:56:27.452: W/System.err(3631): at java.io.ObjectInputStream.corruptStream(ObjectInputStream.java:830)
03-03 01:56:27.452: W/System.err(3631): at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:943)
03-03 01:56:27.462: W/System.err(3631): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2262)
03-03 01:56:27.462: W/System.err(3631): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2217)
03-03 01:56:27.462: W/System.err(3631): at com.mat.omw.fileoperations.FileSaver.saveDestination(FileSaver.java:41)
03-03 01:56:27.462: W/System.err(3631): at com.mat.omw.maps.MapDestination.onOptionsItemSelected(MapDestination.java:284)
03-03 01:56:27.462: W/System.err(3631): at android.app.Activity.onMenuItemSelected(Activity.java:2337)
03-03 01:56:27.462: W/System.err(3631): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:795)
03-03 01:56:27.462: W/System.err(3631): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:160)
03-03 01:56:27.462: W/System.err(3631): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:885)
03-03 01:56:27.462: W/System.err(3631): at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:545)
03-03 01:56:27.462: W/System.err(3631): at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122)
03-03 01:56:27.462: W/System.err(3631): at android.view.View$PerformClick.run(View.java:9293)
03-03 01:56:27.462: W/System.err(3631): at android.os.Handler.handleCallback(Handler.java:587)
03-03 01:56:27.462: W/System.err(3631): at android.os.Handler.dispatchMessage(Handler.java:92)
03-03 01:56:27.462: W/System.err(3631): at android.os.Looper.loop(Looper.java:150)
03-03 01:56:27.462: W/System.err(3631): at android.app.ActivityThread.main(ActivityThread.java:4277)
03-03 01:56:27.462: W/System.err(3631): at java.lang.reflect.Method.invokeNative(Native Method)
03-03 01:56:27.462: W/System.err(3631): at java.lang.reflect.Method.invoke(Method.java:507)
03-03 01:56:27.462: W/System.err(3631): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-03 01:56:27.462: W/System.err(3631): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-03 01:56:27.462: W/System.err(3631): at dalvik.system.NativeStart.main(Native Method)
編集:これを読んでください
理由がよくわかりませんが、何らかの理由で追加できないことがわかりました。毎回データを書き換えるようにコードを変更しましたが、非常に効率が悪いようです。