我有一个简单的Xamarin.android移动应用程序,该应用程序从本地PC中托管的API获取数据。问题是,当我运行该应用程序时,不会获得预期的结果。
_client是HttpClient,我可以从模拟器的浏览器访问相同的URL并获取数据。以下是我的代码。
protected async override void OnAppearing()
{
string content = await _client.GetStringAsync("http://192.168.10.101:1001/api/todo");
base.OnAppearing();
}
一旦我按下F5模拟器,就会启动并运行该应用程序,但没有获取任何数据。同样,当我调试时,一旦按下F10,await语句将执行,应用程序将继续运行,而不会等待。
有人对这个问题有任何想法吗?
我正在使用API版本9,级别28和Visual Studio 2019 谢谢。
答案 0 :(得分:0)
摘自await关键字的官方文档:
等待运算符将暂停执行,直到该方法的工作完成。同时,控制权返回给调用者。当任务完成执行时,await表达式的计算结果为...
这意味着在某些情况下(我怀疑您也是如此),在执行等待的方法时,程序处于不再重要的状态。如果我是正确的。然后,您可以使用Wait()
或Result
protected override void OnAppearing()
{
string content = _client.GetStringAsync("http://192.168.10.101:1001/api/todo").Result;
base.OnAppearing();
}
PS
但是,即使使用Result
对您来说还是可行的,我还是建议您花更多时间研究async/await
并针对您要解决的问题提出更好的解决方案。这个so answer是一个很好的起点。
答案 1 :(得分:0)
问题已获得许可。我尚未在资源中设置权限或网络安全配置。几秒钟后,它给了我一个错误。一旦我设置了这些功能,它就可以正常工作。