【问题标题】:Why am I getting Concurrent Thread Error为什么我收到并发线程错误
【发布时间】:2018-05-03 18:25:07
【问题描述】:

实际上,我正在通过socket.io 向服务器发送base64 字符串的arraylist。但我不知道为什么会出现这个奇怪的错误。

我认为发布 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;
}

【问题讨论】:

  • @Deepakkaku 感谢您的回答先生,但您能否告诉我如何在我的情况下找到该错误点?我认为我没有遍历任何列表
  • 你能分享你的socket.emit函数吗?

标签: java android org.json


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 2020-11-05
    • 2015-01-30
    • 2014-02-10
    • 2015-06-27
    相关资源
    最近更新 更多