Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Array abarbeiten und bei Fehler zurück ins Array legen
ich sammle Daten und lege diese in ein ArrayList:
private ArrayList<ChannelValue> channelValueList = new ArrayList<ChannelValue>();
Ein Timer soll dann die ArrayList ins Internet übertragen.
Hierzu lege ich die lokale ArrayList in ein Upload ArrayList:
private ArrayList<ArrayList<ChannelValue>> uploadChannelValueList = new ArrayList<ArrayList<ChannelValue>>();
Mein Code:
Java:
public void onSenden() {
if (uploadChannelValueList.isEmpty()) {
return;
}
uploadChannelValueList.add(channelValueList);
for (Iterator<ArrayList<ChannelValue>> iterator = this.uploadChannelValueList
.iterator(); iterator.hasNext();) {
ArrayList<ChannelValue> value = iterator.next();
Runnable r = new SendHTTP(value, getPropertyUrl(),
getPropertyNodeid(), getPropertyApikey(), this);
new Thread(r).start();
iterator.remove();
}
channelValueList.clear();
updateOutputBuffer(channelValueList.size());
updateOutputUploadbuffer(uploadChannelValueList.size());
}
Wie kommst du zu deiner Vermutung? Welches Verhalten veranlasst dich dazu?
Einfach Überprüfung ob es richtig funktioniert: Lass dir doch einfach mal die Listengröße vor und nach der Schleife ausgeben, du wirst sehen das "remove()" ohne Probleme funktioniert.
Irgendwie glaube ich hast du dich mit deinen Listen etwas vertan (kann mich aber auch irren):
Welchen Sinn sollen diese beiden Zeilen haben? Zuerst leerst du die Liste, danach verwendest du die größe als Parameter. Die Größe hier wird immer 0 sein.
Java:
uploadChannelValueList.add(channelValueList);
for (Iterator<ArrayList<ChannelValue>> iterator = this.uploadChannelValueList.iterator(); iterator.hasNext();) {
ArrayList<ChannelValue> value = iterator.next();
......
iterator.remove();
}
.....
updateOutputUploadbuffer(uploadChannelValueList.size());
Auch diese Logik finde ich komisch. Sofern deine upload Liste leer ist sendest du nichts ok.
Sollte etwas vorhanden sein, fügst du eine weitere Liste hinzu und iterierst über die uploadListe.
Jeder Eintrag aus der upload-Liste wird entfernt und am Ende der Methode willst du wieder auf die Größe der upload-Liste zugreifen -> die wird immer 0 sein an dieser Stelle.