2017-02-01 6 views
1

Ich versuche, Daten zu zählen und doppelte Daten durch den folgenden Code zu entfernen, aber ich habe eine Fehlermeldung mit diesem Code erhalten.Wie man Daten in Java zählt

Kann mir jemand helfen?

StructorRecords.java

public class StructorRecords { 

public String recorusername; 
public String id; 
public String full_name; 
public String recordimg; 
public Integer count;} 

counter.java

public static void orderbylike(StructorRecords data) { 
    if (G.bollike) { 
     G.savelike.add(data); 
    } else { 
     Iterator itr = G.savelike.iterator(); 
     int i = 1; 
     while (itr.hasNext()) { 
      StructorRecords SR = (StructorRecords) itr.next(); 
      if (SR.id.equals(data.id)) { 
       data.count = SR.count + 1; 
       G.savelike.set(i, data); 
      } else { 
       G.savelike.add(data); 
      } 
      i++; 
     } 

    } 
} 

dies Protokolle, die mir bekommen LOG

02-01 17:19:23.142 7587-9416/sanjinsgr.limosoftwaregroup.ir.instasanj W/System.err: java.util.ConcurrentModificationException 
02-01 17:19:23.152 7587-9416/sanjinsgr.limosoftwaregroup.ir.instasanj W/System.err:  at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:569) 
02-01 17:19:23.152 7587-9416/sanjinsgr.limosoftwaregroup.ir.instasanj W/System.err:  at sanjinsgr.limosoftwaregroup.ir.instasanj.counter.orderbylike(counter.java:21) 
02-01 17:19:23.152 7587-9416/sanjinsgr.limosoftwaregroup.ir.instasanj W/System.err:  at sanjinsgr.limosoftwaregroup.ir.instasanj.loginActivity$11.run(loginActivity.java:460) 
02-01 17:19:23.162 7587-9416/sanjinsgr.limosoftwaregroup.ir.instasanj W/System.err:  at java.lang.Thread.run(Thread.java:856) 
02-01 17:19:23.451 7587-9472/sanjinsgr.limosoftwaregroup.ir.instasanj W/System.err: java.util.ConcurrentModificationException 
02-01 17:19:23.451 7587-9472/sanjinsgr.limosoftwaregroup.ir.instasanj W/System.err:  at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:569) 
02-01 17:19:23.451 7587-9472/sanjinsgr.limosoftwaregroup.ir.instasanj W/System.err:  at sanjinsgr.limosoftwaregroup.ir.instasanj.counter.orderbylike(counter.java:21) 
02-01 17:19:23.461 7587-9472/sanjinsgr.limosoftwaregroup.ir.instasanj W/System.err:  at sanjinsgr.limosoftwaregroup.ir.instasanj.loginActivity$11.run(loginActivity.java:460) 
02-01 17:19:23.461 7587-9472/sanjinsgr.limosoftwaregroup.ir.instasanj W/System.err:  at java.lang.Thread.run(Thread.java:856) 
02-01 17:19:23.583 7587-9417/sanjinsgr.limosoftwaregroup.ir.instasanj W/System.err: java.util.ConcurrentModificationException 
02-01 17:19:23.583 7587-9417/sanjinsgr.limosoftwaregroup.ir.instasanj W/System.err:  at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:569) 
02-01 17:19:23.583 7587-9417/sanjinsgr.limosoftwaregroup.ir.instasanj W/System.err:  at sanjinsgr.limosoftwaregroup.ir.instasanj.counter.orderbylike(counter.java:21) 
02-01 17:19:23.583 7587-9417/sanjinsgr.limosoftwaregroup.ir.instasanj W/System.err:  at sanjinsgr.limosoftwaregroup.ir.instasanj.loginActivity$11.run(loginActivity.java:460) 
02-01 17:19:23.592 7587-9417/sanjinsgr.limosoftwaregroup.ir.instasanj W/System.err:  at java.lang.Thread.run(Thread.java:856) 
+0

Können Sie Fehlerprotokoll bitte posten! So wird es einfacher – Akshay

Antwort

1

Fehler ist da Sie versuchen, Element der Liste hinzuzufügen (ich nehme an, G.savelike ist eine Liste), während Sie durch die gleiche Liste mit Iterator durchlaufen.

Es ist nicht erlaubt. Erstellen Sie stattdessen eine weitere tmpList für alle neuen Elemente, fügen Sie sie hinzu und verwenden Sie nach der Iterator-Schleife die Methode addAll().

wie folgt aus:

List<StructorRecords> tmpList = new ArrayList<StructorRecords> tmpList; 
while (itr.hasNext()) { 
     StructorRecords SR = (StructorRecords) itr.next(); 
     if (SR.id.equals(data.id)) { 
      data.count = SR.count + 1; 
      G.savelike.set(i, data); 
     } else { 
      // here put to temp list 
      tmpList.add(data); 
     } 
     i++; 
    } 
    // add all new elements 
    G.savelike.addAll(tmpList); 
+1

BTW: Listenindex beginnt bei 0, nicht von 1, so scheint es wie Code auf dem letzten Element fehlschlagen kann, wenn 'G.savelike.set (i, Daten); 'aufgerufen ... – Vadim

0

Sie können die Sammlungen von Java Concurrency-Paket verwenden, die sicher Iterator fehl bieten, wenn Sie Kollektionen von java.util Paket verwenden die Iteratoren sind Ausfallen schnelle Art und gleichzeitige Änderung Ausnahme auslösen Immer wenn Sie iterieren, versuchen Sie, die Sammlung gleichzeitig zu aktualisieren.