我在 Android/iOS/C# 方面经验丰富,但对 Xamarin/VS for Mac 不太熟悉,从这里开始...
我的解决方案中有两个项目。一个 iOS 应用程序项目和一个 PCL。 希望能够在 PCL 中编写我的网络/REST 层。
不过我遇到了一大堆运行时问题。这是我的 PCL 中的代码。
public static OverwatchAPI CreateClient(HttpClient c)
{
var shared = new OverwatchAPI
{
client = c
};
return shared;
}
public async Task<Stats> GetStats(string username)
{
var stats = new Stats();
var uri = new Uri(string.Format("{0}{1}{2}", baseURL, "/stats/xbl/us/", username));
var response = await client.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
stats = JsonConvert.DeserializeObject<Stats>(content);
}
return stats;
}
在我的 iOS 项目中,我的设置如下。
OverwatchAPI api = OverwatchAPI.CreateClient(new HttpClient(new CFNetworkHandler()));
...
public Stats GetStats(string playerName)
{
Stats stats = api.GetStats(playerName).Result;
return stats;
}
它只是卡在 api.GetStats 上,我不知道为什么或要查看什么才能进一步调查此问题。我也不知道该问自己什么问题才能更好地推理。
卡住了。任何指示都会很棒 - 谢谢!
最佳答案
使用 async
& await
获取任务的 Result
而不是访问属性。使异步方法同步运行会阻塞 UI 线程,这在移动应用程序中绝对不希望发生(对 REST 服务的调用可能需要一两秒,此时 UI 会被阻塞)
利用async / await
您必须调整您的 iOS 方法才能返回 Task<Stats>
就像您的 PCL 方法一样。
关于ios - PCL 中的 HttpClient 调用在 iOS 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44467197/