错误 #11243
【文件管理器】浏览U盘内的office文档,系统返回键返回时,文件管理器停止运行
0%
1.0.2
描述
操作步骤:
1.插入U盘
2.进入文件管理器
3.分类-文档中打开U盘内的word文档
4.浏览后系统返回键返回
实际结果:
文件管理器停止运行
预期结果:
不报错
历史记录
#1 由 a3肖静 更新于 超过 4 年 之前
12-11 15:44:42.564 30258 30258 E AndroidRuntime: FATAL EXCEPTION: main
12-11 15:44:42.564 30258 30258 E AndroidRuntime: Process: com.ebensz.filemanager, PID: 30258
12-11 15:44:42.564 30258 30258 E AndroidRuntime: java.util.ConcurrentModificationException
12-11 15:44:42.564 30258 30258 E AndroidRuntime: at java.util.ArrayList$Itr.next(ArrayList.java:831)
12-11 15:44:42.564 30258 30258 E AndroidRuntime: at com.ebensz.filemanager.ui.ContentView.addData(ContentView.java:1786)
12-11 15:44:42.564 30258 30258 E AndroidRuntime: at com.ebensz.filemanager.ui.ContentView.handleMessage(ContentView.java:350)
12-11 15:44:42.564 30258 30258 E AndroidRuntime: at com.ebensz.filemanager.ui.BaseUiFmcImpl.handleMessage(BaseUiFmcImpl.java:308)
12-11 15:44:42.564 30258 30258 E AndroidRuntime: at com.ebensz.filemanager.ui.UIAgent.handleMessage(UIAgent.java:733)
12-11 15:44:42.564 30258 30258 E AndroidRuntime: at com.ebensz.filemanager.ui.UIHandler.handleMessage(UIHandler.java:77)
12-11 15:44:42.564 30258 30258 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
12-11 15:44:42.564 30258 30258 E AndroidRuntime: at android.os.Looper.loop(Looper.java:154)
12-11 15:44:42.564 30258 30258 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6182)
12-11 15:44:42.564 30258 30258 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
12-11 15:44:42.564 30258 30258 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
12-11 15:44:42.564 30258 30258 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
#3 由 匿名用户 更新于 超过 4 年 之前
原因:ArrayList中数据元素不同步
修改前:
public void addData(List<FileItem> items) {
final List<FileItem> oldItems = getData();
HashMap<String, FileItem> bTotalItems = new HashMap<String, FileItem>();
for (FileItem item : oldItems) {
bTotalItems.put(item.getUriPath(), item);
}
synchronized (oldItems) {
for (FileItem item : items) {
if (bTotalItems.get(item.getUriPath()) == null) {
oldItems.add(item);
}
}
}
}
修改后:
public synchronized void addData(List<FileItem> items) {
final List<FileItem> oldItems = getData();
HashMap<String, FileItem> bTotalItems = new HashMap<String, FileItem>();
Iterator<FileItem> oldIterator = oldItems.iterator();
while (oldIterator.hasNext()) {
FileItem next = oldIterator.next();
bTotalItems.put(next.getUriPath(), next);
}
Iterator<FileItem> iterator = items.iterator();
while (iterator.hasNext()) {
FileItem next = iterator.next();
if (bTotalItems.get(next.getUriPath()) == null) {
oldItems.add(next);
}
}
}