[英]Why am I getting Concurrent Thread Error
Actually I'm sending an arraylist of base64
string to server by socket.io
.But I don't know why I'm getting this strange error . 实际上我是通过
socket.io
向服务器发送base64
字符串的socket.io
。但是我不知道为什么会收到这个奇怪的错误。
I thought it's important to post the base64 conversion method that's why I've posted that as well. 我认为发布base64转换方法很重要,因此我也发布了该方法。
Can anyone please help me to fix this error? 谁能帮我解决这个错误?
Error: 错误:
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:792)
at java.util.HashMap$EntryIterator.next(HashMap.java:829)
at java.util.HashMap$EntryIterator.next(HashMap.java:827)
at org.json.JSONObject.writeTo(JSONObject.java:666)
at org.json.JSONStringer.value(JSONStringer.java:237)
at org.json.JSONArray.writeTo(JSONArray.java:572)
at org.json.JSONArray.toString(JSONArray.java:544)
at java.lang.StringBuilder.append(StringBuilder.java:202)
at io.socket.parser.Parser$Encoder.encodeAsString(Parser.java:116)
at io.socket.parser.Parser$Encoder.encode(Parser.java:85)
at io.socket.client.Manager.packet(Manager.java:461)
at io.socket.client.Socket.packet(Socket.java:264)
at io.socket.client.Socket.access$1100(Socket.java:19)
at io.socket.client.Socket$5.run(Socket.java:201)
at io.socket.thread.EventThread$2.run(EventThread.java:80)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
Code: 码:
// Here bit is the bitmap arraylist
final JSONObject obj=new JSONObject();
try {
obj.put("uploads_username",username);
obj.put("uploads",convert(bit));
socket.emit("data",obj);
} catch (JSONException e) {
e.printStackTrace();
}
public ArrayList<String> convert(ArrayList<Bitmap> bitmap){
ArrayList<String> pics=new ArrayList<>();
for(int i=0;i<bitmap.size();i++){
pics.add(getStringImage(bitmap.get(i)));
}
return pics;
}
public static String getStringImage(Bitmap bmp){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
return encodedImage;
}
It's possible that elsewhere in your code you are manipulating the object passed to socket.io (or one of its fields) concurrently while the asynchronous network call is being performed. 在执行异步网络调用的同时,您有可能在代码的其他位置同时处理传递给socket.io(或其字段之一)的对象。
Can you isolate the code being executed to only contain the creation of the object and the network call and see if the error still happens? 您能否将正在执行的代码隔离为仅包含对象的创建和网络调用,并查看错误是否仍然发生?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.