-3

我在排序中面临 ArrayIndexOutOfBoundsException 。我的代码在这里:

Collections.sort(mutualFriends, new Comparator<FriendInfo>() {
   public int compare(FriendInfo s1, FriendInfo s2) {
       return s1.name.compareToIgnoreCase(s2.name);
   }
});

日志在这里:

    STACK_TRACE=java.lang.ArrayIndexOutOfBoundsException
    at java.util.Collections.sort(Collections.java:1970)
    at com.platinumapps.fragments.Mutual_Friends_Fragment$1.onComplete(Mutual_Friends_Fragment.java:138) 
    at com.platinumapps.facedroid.AsyncRequestListener.onComplete(AsyncRequestListener.java:59) 
    at com.facebook.android.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:328)

我的共同好友列表如下:

private List<FriendInfo> mutualFriends = new ArrayList<FriendInfo>();

任何想法来解决这个问题。提前致谢。

4

1 回答 1

5

您很可能在这里进行数据竞赛

其他一些线程在排序(或访问)时尝试修改列表 - 你会得到一个竞争条件,这在你的情况下会导致IndexOutOfBoundsException.

很难知道问题到底出在哪里,但一些通用的解决方法是:

  1. 确保您的代码是线程安全的。可以通过 在使用它的任何地方 对对象进行synchronizeding来轻松完成 -ArrayList
  2. 使用专为线程安全而设计的类。

在您的情况下可能存在问题的一个常见错误是产生线程,而不是在排序之前等待它们完成工作。这可以通过join()在假设它们完成之前简单地调用所有线程来解决 - 这可以确保您在所有线程完成之前不会继续。

于 2013-01-16T07:39:55.213 回答