我继承的一些源代码有时会在这一行抛出 ConcurrentModificationException:
for (String c : filteredList) {
正文:
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
ArrayList<String> filteredList = (ArrayList<String>) results.values;
if (results != null && results.count > 0) {
clear();
for (String c : filteredList) {
add(c);
}
notifyDataSetChanged();
}
}
我应该如何防止此错误发生?
最佳答案
并发修改异常:
It is not generally permissible for one thread to modify a Collection while another thread is iterating over it...
修补程序解决方案,将克隆 ArrayList<String>
,在迭代之前:
ArrayList<String> filteredList = (ArrayList<String>) results.values.clone();
您需要考虑,如果列表很大,您将在这段时间内消耗两倍的 RAM。
顺便说一句,我会先运行验证,然后映射/克隆你的列表,切换你的前两行,作为性能改进:
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
ArrayList<String> filteredList = (ArrayList<String>) results.values.clone();
clear();
for (String c : filteredList) {
add(c);
}
notifyDataSetChanged();
}
}
希望对您有所帮助!干杯,
关于java - PublishResult 中的 ConcurrentModificationException - ArrayAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41316886/