【发布时间】:2020-06-06 15:03:33
【问题描述】:
我正在开发一个从 Scala 服务器接收 JSON 格式数据的 Flutter 应用。
一切正常,但有时我收到一条不完整的消息。
我正在使用 Streambuilder 来处理这个过程,代码如下:
return StreamBuilder(
stream: Utils.socket,
builder: (_, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Scaffold(
body: Center(
child: AdaptiveSpinner(
withMessage: 'Connecting to game server',
),
),
);
}
if (snapshot.error != null) {
return NetworkErrorScreen();
}
final message = String.fromCharCodes(snapshot.data);
[...]
);
在正常行为中,String.fromCharCodes(snapshot.data); 给了我一个有效的 JSON,然后我对其进行解析,等等……但有时 json 不完整(套接字只读取它的一部分,从头开始直到一个未定义的点,或者从一个未定义的点开始到同一个 json 的结尾)。
关于如何解决这个问题的任何想法?可能与缓冲区大小问题有关?请帮忙!
【问题讨论】:
-
Utils.socket是如何实现的? -
Utils.socket = await Socket.connect(IP, Port);
-
没有人,也许我解释得不好。问题是我要解析的 json 不完整。例如我收到 { "key": { "subkey1": 1, "subkey2": "someval
-
因为你不使用
transform(json.decoder)- 你看到我发布的链接了吗?他们展示了如何使用transform- 在你的情况下,你必须使用两个transforms -transform(utf8.decoder).transform(json.decoder)或使用保险丝:transform(utf8.decoder.fuse(json.decoder))
标签: sockets flutter dart tcpsocket