gpt4 book ai didi

ios - PCL 中的 HttpClient 调用在 iOS 中不起作用

转载 作者:行者123 更新时间:2023-11-29 00:19:09 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com