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

标签 ios rest http xamarin client

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

相关文章:

ios - 使用 KVO 与 NSNotificationCenter 观察可变数组的变化

ios - iOS 上的 SQLite 使用现有架构

ios - 如何从索引到索引解析NSString?

java - 使用 UriBuilder 从 XmlAdapter 创建绝对 URI

javascript - 从单独的应用程序访问 Sharepoint Project Web 应用程序 REST

java - 使用 native Java 检查 4xx Http 代码

ios - 在 TableViewController 和 ViewController 之间进行委托(delegate)

python - Flask登录(无数据库)

python - 错误 : HTTPS site requires a 'Referer header' to be sent by your Web browser, 但未发送

Java : Using ExecutorService for httpRequests