我在排序中面临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>();
有任何想法来解决这个问题。提前谢谢。
答案 0 :(得分:5)
您最有可能在此处进行数据竞赛。
其他一些线程会在对列表进行排序(或访问)时尝试修改列表 - 并且您会遇到竞争条件,这会导致IndexOutOfBoundsException
。
很难知道问题究竟在哪里,但解决问题的一些通用方法是:
ArrayList
对象synchronized
ing到处都是join()
正在使用 - 在您的情况下可能出现问题的常见错误是产生线程,而不是在排序之前等待它们完成工作。这可以通过在假设它们完成之前在所有线程上调用{{3}}来解决 - 这可以确保在所有线程完成之前不会继续。