问题出现的环境背景及自己尝试过哪些方法
之前网页下使用socket.binaryType = "arraybuffer";
或者各客户端原生环境下的socket都支持传输二进制数据如:protobuf都没有问题。
但是安卓下weex默认不提供websocket的实现,需要自己写adapter,幽默坑的是提供的接口IWebSocketAdapter默认认的send接口参数为String,void send (void String var1),onMessage(String var1)。
难道weex真要沦为了KPI的玩意??
安卓下使用weex的websocket需要特殊处理下?转base64??### 问题描述
相关代码
// js
class ChatController {
constructor({ socket } = {}) {
super();
this.socket = socket;
this.socket.binaryType = "arraybuffer";
this.openSocket();
}
openSocket() {
this.socket.WebSocket(wsURL);
this.socket.onmessage = (data) => this.receive(data);
this.socket.onopen = (options) => console.log('opened connection');
this.socket.onerror = (data) => console.error(data);
}
send(message) {
this.socket.send(message);
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
以上代码在浏览器下执行的时候没有问题
但在安卓下的JAVA代码里处理成{"@type":"binary","base64":"","dataType":"ArrayBuffer"}了
// WebSocketAdapter
@Override
public void send(String data) {
WXLogUtils.i("WebSocketAdapter", data);
if (ws != null) {
try {
Buffer buffer = new Buffer().writeUtf8(data);
ws.sendMessage(WebSocket.PayloadType.BINARY, buffer.buffer());
buffer.flush();
buffer.close();
wsEventReporter.frameSent(data);
} catch (Exception e) {
e.printStackTrace();
reportError(e.getMessage());
wsEventReporter.frameError(e.getMessage());
}
} else {
reportError("WebSocket is not ready");
}
}