简体   繁体   English

为什么会出现并发线程错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM