我在排序中面临ArrayIndexOutOfBoundsException.我的代码在这里:
Collections.sort(mutualFriends, new Comparator<FriendInfo>() {
public int compare(FriendInfo s1, FriendInfo s2) {
return s1.name.compareToIgnoreCase(s2.name);
}
});
Run Code Online (Sandbox Code Playgroud)
日志在这里:
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)
Run Code Online (Sandbox Code Playgroud)
我的共同朋友名单如下:
private List<FriendInfo> mutualFriends = new ArrayList<FriendInfo>();
Run Code Online (Sandbox Code Playgroud)
有任何想法来解决这个问题.提前致谢.
您很可能在这里进行数据竞争.
一些其他线程尝试在排序(或访问)时修改列表 - 并且你得到一个竞争条件,这会导致你的情况IndexOutOfBoundsException.
很难知道问题的确切位置,但解决问题的一些通用方法是:
synchronized通过 在ArrayList任何地方使用的对象轻松完成
-在您的情况下可能出现问题的常见错误是产生线程,而不是在排序之前等待它们完成工作.这可以通过join()在假设它们完成之前简单地调用所有线程来解决- 这可以确保在所有线程完成之前不会继续.
| 归档时间: |
|
| 查看次数: |
2054 次 |
| 最近记录: |