我希望你能帮助我。我对dart并不完全陌生,因为我已经设置了flutter应用程序的主要部分。但我的应用程序需要一个后端服务器,我认为dart服务器会很方便,因为我喜欢dart语言。因此,我建立了一个运行Ubuntu的普通在线服务器,并开始使用VS Code SSH Remote进行开发。我需要我的服务器刷新和重组其存储的数据,以便我的应用程序可以轻松地获取数据。昨天我试着下载了必要的.csv文件,一切都很好。今天,HTTPClient一直在加载。
我的代码:
refreshData() {
refresh() async {
print('refreshing data...');
var client = await Client()
.send(Request('GET', Uri.parse(articlesUrl)))
.timeout(Duration(seconds: 45));
int total = client.contentLength ?? 0;
int received = 0;
client.stream.listen((value) {
bytes.addAll(value);
received += value.length;
print('Received: ' + received.toString() + 'of: ' + total.toString());
}).onDone(() async {
await File('assets/data/articles.csv').writeAsBytes(bytes);
print('file written.');
});
}
refresh();
const timer = Duration(minutes: 30);
Timer.periodic(timer, (Timer t) async {
refresh();
});
}
代码一直执行到打印("刷新数据…"(正常,然后我完全不知道会发生什么。即使超时功能也不起作用,监听功能也不工作。但我没有抛出任何异常或错误。我也尝试了Dio包作为HTTP客户端,但它保持不变。另一台服务器上的文件可以正常访问,就像以前一样,curl报告我从中获取文件的服务器没有问题。端口空闲,HTTPServer报告没有问题。
有人有同样的问题吗?或者你知道如何正确调试,这样我就可以看到HTTPClient在做什么了吗?
- 您没有
close
客户端。并且每次调用refresh
都创建一个
我会创建一个客户端。
- 您不需要等待流结束。我宁愿
await client.stream.forEach
而不去听
这些东西可能会帮助您调试