【发布时间】:2020-02-24 10:17:20
【问题描述】:
我正在尝试通过 Dart 从 this link 获取数据。由于我正在使用基于dart:io 库的HttpClientResponse 实例来listen 从上述链接获得的数据,因此我认为StringBuffer 的实例将是最好的选择捕获接收到的数据。这将帮助我以增量方式构建响应字符串。但似乎我没有正确使用StringBuffer,因为最后响应字符串(存储在receivedBuffer)仍然是空的。
代码:
import 'dart:io';
import 'dart:convert';
void main() async
{
StringBuffer receivedBuffer = new StringBuffer("");
String url = "https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty";
HttpClient client = new HttpClient();
HttpClientRequest request = await client.getUrl(Uri.parse(url));
HttpClientResponse response = await request.close();
print("[info] Fetch successful. Proceeding to transform received data ...");
response.transform(utf8.decoder).listen((contents) => receivedBuffer.write(contents));
print("[info] Done. Contents:\n");
print(receivedBuffer);
}
输出:
[info] Fetch successful. Proceeding to transform received data ...
[info] Done. Contents:
另外,如果我写print(contents),而不是receivedBuffer.write(contents),那么所有
所需数据按预期打印。但是在尝试将contents 写入recievedBuffer 时,似乎receivedBuffer 甚至没有更新一次。
我阅读了this article,并试图将那里的答案合并到我的代码中。准确地说,我使用了Completer 实例来解决我的问题,但这并没有帮助。
上面提供的代码有什么问题?
【问题讨论】:
-
尝试在
onDone函数中打印缓冲区,您可以在listen()函数中设置该缓冲区
标签: dart