Hallo liebe Java-Forum-Communitiy,
als erstes möchte ich mich für eventuelle Fehler entschuldigen. Dies ist mein erster Beitrag in einem Forum.
Nun zu meinem Problem. Ich bin momentan dabei eine App zuprogrammieren, die mehrere .xml Dateien von unserem Schulserver ausliest. Nach dem ich die xml Dateien geparsed habe und ein bisschen aufgesplittet habe (in Head, Action und Footer) schreibe ich die verschiedenen Elemente in eine ArrayList (für jeden Type [also Head, Action und Footer] eine seperate). Nun möchte ich das alles in einer Datei speichern. Dazu habe ich mir eine eigene Methode geschrieben in der ich jede der einzelnen Listen durchlaufen lassen mittels einem Iterator. Ich bekomme leider dennoch immer wieder eine ConcurrentModificationException. Meine Methode sieht so aus:
Die auskommentierten Zeilen sind meine Vorherigen versuche. Ich habe auch schon versucht einen snychronized Block drauszumachen, da ich dies auf diversen Seiten gelesen habe. Aber es bringt leider alles nichts. Hier ist noch der LogCatoutput:
Ich danke euch im vorraus schon mal für eure Hilfe.
Grüße Robat
als erstes möchte ich mich für eventuelle Fehler entschuldigen. Dies ist mein erster Beitrag in einem Forum.
Nun zu meinem Problem. Ich bin momentan dabei eine App zuprogrammieren, die mehrere .xml Dateien von unserem Schulserver ausliest. Nach dem ich die xml Dateien geparsed habe und ein bisschen aufgesplittet habe (in Head, Action und Footer) schreibe ich die verschiedenen Elemente in eine ArrayList (für jeden Type [also Head, Action und Footer] eine seperate). Nun möchte ich das alles in einer Datei speichern. Dazu habe ich mir eine eigene Methode geschrieben in der ich jede der einzelnen Listen durchlaufen lassen mittels einem Iterator. Ich bekomme leider dennoch immer wieder eine ConcurrentModificationException. Meine Methode sieht so aus:
Java:
public void writeDataIntoFile(String filename, Context context) {
try {
outputStream = context.openFileOutput(filename, Context.MODE_PRIVATE);
synchronized (Head.allHeads) {
for ( Iterator<Head> iterHead = Head.allHeads.iterator(); iterHead.hasNext(); ) {
Head head = iterHead.next();
outputStream.write(head.toData().getBytes("ISO-8859-1"));
}
outputStream.write(("\n" + "Action").getBytes("ISO-8859-1"));
}
// for (Head a : Head.allHeads) {
// outputStream.write(a.toData().getBytes("ISO-8859-1"));
// }
synchronized (Action.allActions) {
for ( Iterator<Action> iterAction = Action.allActions.iterator(); iterAction.hasNext(); ) {
Action action = iterAction.next();
outputStream.write(action.toData().getBytes("ISO-8859-1"));
}
outputStream.write(("\n" + "FooterInfo").getBytes("ISO-8859-1"));
}
// for (Action a : Action.allActions) {
// outputStream.write(a.toData().getBytes("ISO-8859-1"));
// }
synchronized (Footer.allFooters) {
for ( Iterator<Footer> iterFooter = Footer.allFooters.iterator(); iterFooter.hasNext(); ) {
Footer footer = iterFooter.next();
outputStream.write(footer.toData().getBytes("ISO-8859-1"));
}
}
// for (Footer f : Footer.allFooters) {
// outputStream.write(footer.toData().getBytes("ISO-8859-1"));
// }
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
XMLHandler.reset();
if (outputStream != null) {
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Die auskommentierten Zeilen sind meine Vorherigen versuche. Ich habe auch schon versucht einen snychronized Block drauszumachen, da ich dies auf diversen Seiten gelesen habe. Aber es bringt leider alles nichts. Hier ist noch der LogCatoutput:
Java:
08-08 00:43:36.028: E/AndroidRuntime(20330): FATAL EXCEPTION: main
08-08 00:43:36.028: E/AndroidRuntime(20330): Process: com.roberthein.mobilev, PID: 20330
08-08 00:43:36.028: E/AndroidRuntime(20330): java.util.ConcurrentModificationException
08-08 00:43:36.028: E/AndroidRuntime(20330): at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
08-08 00:43:36.028: E/AndroidRuntime(20330): at com.roberthein.mobilev.helperclasses.Manager.writeDataIntoFile(Manager.java:94)
08-08 00:43:36.028: E/AndroidRuntime(20330): at com.roberthein.mobilev.parser.MyXmlParserFactory.onPostExecute(MyXmlParserFactory.java:113)
08-08 00:43:36.028: E/AndroidRuntime(20330): at com.roberthein.mobilev.parser.MyXmlParserFactory.onPostExecute(MyXmlParserFactory.java:1)
08-08 00:43:36.028: E/AndroidRuntime(20330): at android.os.AsyncTask.finish(AsyncTask.java:632)
08-08 00:43:36.028: E/AndroidRuntime(20330): at android.os.AsyncTask.access$600(AsyncTask.java:177)
08-08 00:43:36.028: E/AndroidRuntime(20330): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
08-08 00:43:36.028: E/AndroidRuntime(20330): at android.os.Handler.dispatchMessage(Handler.java:102)
08-08 00:43:36.028: E/AndroidRuntime(20330): at android.os.Looper.loop(Looper.java:212)
08-08 00:43:36.028: E/AndroidRuntime(20330): at android.app.ActivityThread.main(ActivityThread.java:5135)
08-08 00:43:36.028: E/AndroidRuntime(20330): at java.lang.reflect.Method.invokeNative(Native Method)
08-08 00:43:36.028: E/AndroidRuntime(20330): at java.lang.reflect.Method.invoke(Method.java:515)
08-08 00:43:36.028: E/AndroidRuntime(20330): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)
08-08 00:43:36.028: E/AndroidRuntime(20330): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
08-08 00:43:36.028: E/AndroidRuntime(20330): at dalvik.system.NativeStart.main(Native Method)
Ich danke euch im vorraus schon mal für eure Hilfe.
Grüße Robat
Zuletzt bearbeitet: