1

ネットワーク サービスから返される定義済みオブジェクトのリストがあります (ネットワーク サービスはこのリストを更新します)。ある時点で、これですでに持っていたものをリストビューにレンダリングしたいと思います。私は次のコードを持っています:

List<MyObject> myObjects = MyService.getInstance().getListOfMyObject()

また、myObjects リストを更新する別のスレッドがあるため、同時実行変更の例外を回避したいと考えています。私は持っている:

 List<MyObject> clonedList = null;
 synchronized(myObjects){
         clonedList = MyListUtils.cloneList(myObjects)
 }

MyListUtils の cloneList() 関数は、簡単な方法で実装されます。

public static <T extends ICloneable<T>> List<T> cloneList(final List<T> source){
    List<T> result  = new ArrayList<T>();
    for(T t : source){
       T newObject = t.clone();
       result.add(newObject);
    }
    return result;
}

-ICloneable インターフェイスは気にしないでください。この ICloneable を使用してマークを付けます。

そして、私はこの例外を与えられました

03-11 16:07:11.370: E/AndroidRuntime(8076): FATAL EXCEPTION: main
03-11 16:07:11.370: E/AndroidRuntime(8076): java.util.ConcurrentModificationException
03-11 16:07:11.370: E/AndroidRuntime(8076):  at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:569)
03-11 16:07:11.370: E/AndroidRuntime(8076):  at xxx.utilities.MyListUtils.cloneList(CollectionUtils.java:120)

私はそれの何が問題なのかわかりませんか?オブジェクトを変更する関数は呼び出しませんでした。オブジェクトの 1 ビットも変更されないことがわかっている限り、オブジェクトを「複製」するだけです。どんなアイデアでも大歓迎です、ありがとう。

4

1 に答える 1

1

いくつかのスレッドに従って、Androidアニメーションのjava.util.ConcurrentModificationExceptionやAndroidでConcurrentModificationExceptionを処理する方法などを見つけることができました

リストを反復処理していて、同時に他のスレッドもそれを変更している場合..これも..を引き起こしConcurrentModificationExceptionます..したがって、リストの渡されたオブジェクトでメソッドを試しsychronizingてみてください..cloneList

synchronized(source)
{
    // make a copy
}

データを変更しているスレッドですでにこれを行っていることを願っています...

于 2013-03-11T09:18:59.293 に答える