我在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上,我无法弄清楚为什么或要看什么来进一步研究这个问题。我也不知道要问自己什么问题,以便更好地推理它。
卡住。任何指针都会很棒 - 谢谢!
答案 0 :(得分:1)
使用async
&amp; await
获取任务Result
而不是访问该媒体资源。使异步方法同步运行会阻止您在移动APP中绝对不需要的UI线程(对REST服务的调用可能需要一两秒钟,并且此时UI将被阻止)
使用async / await
您必须调整iOS方法,以便像PCL方法一样返回Task<Stats>
。