[0]关于ConchJNI.RunJS无法发送过长字符的处理方案

ConchJNI.RunJS是使用反射调用的js内部方法,以前发现过超过一定数额的字符就无法透传过去了.最近接华为这问题卡那不得不解决了,于是写了个拆分来处理(参考socket的方案).
首先是java端的代码:
public static void ReturnEvent(Object c) {
String returnMsg = new Gson().toJson(c).replace("\n", "");
if (returnMsg.length() >= 1000) {
Debug.LogError("透传参数过长,准备拆分后发送");
returnMsg = Base64.encodeToString(returnMsg.getBytes(StandardCharsets.UTF_8), Base64.DEFAULT).replace("\n", "");
int max = 500;
int len = returnMsg.length() / max;
for (int i = 0; i < len; i++) {
ConchJNI.RunJS("returnEvent({\"UnpackingStr\":\"" + returnMsg.substring(i * max, (i + 1) * max) + "\"})");
}
ConchJNI.RunJS("returnEvent({\"UnpackingStrOver\":\"" + returnMsg.substring(len * max) + "\"})");
} else {
ConchJNI.RunJS("returnEvent(" + returnMsg + ")");
}
}

超过一定字符就拆分成多个base64,然后再在js里进行组装解码
static ReturnEvent(json) {
if (json.UnpackingStr != null) {
ScriptBridge.UnpackingStr += json.UnpackingStr;
return;
} else if (json.UnpackingStrOver != null) {
ScriptBridge.UnpackingStr += json.UnpackingStrOver;
let base = Base64.decode(ScriptBridge.UnpackingStr)
console.log(base)
json = JSON.parse(base);
ScriptBridge.UnpackingStr = "";
}
}
已邀请:

要回复问题请先

商务合作
商务合作