0

实际上,我正在向base64服务器发送一个字符串数组列表socket.io。但我不知道为什么我会收到这个奇怪的错误。

我认为发布 base64 转换方法很重要,这也是我发布该方法的原因。

谁能帮我解决这个错误?

错误:

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)

代码:

// 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;
}
4

1 回答 1

1

在执行异步网络调用时,您可能在代码的其他地方同时操作传递给 socket.io 的对象(或其字段之一) 。

您能否将正在执行的代码隔离为仅包含对象的创建和网络调用,并查看错误是否仍然发生?

于 2018-05-03T20:07:53.017 回答