Xamarin API VK List forming



我正在尝试为一项工作做资格认证工作,但在 Xamarin 上实现代码时遇到了一些问题。我有这样的类和函数。他们正在 c# 控制台上工作,但不是在 xamarin 中工作。我不知道该怎么办。他们只冻结了Xamarin。

using System.Collections.Generic;
using System.Threading.Tasks;
using System.Net.Http;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace radacode.ActionForm
{
class ListMaker
{
    public static List<Country> GetCountryList()
    {
        List<Country> result=new List<Country>();
        Task<string> task =GetRequestAsync(@"http://api.vk.com/method/database.getCountries?need_all=1&v=5.60");
        JObject vk = JObject.Parse(task.GetAwaiter().GetResult());
        foreach (JObject jsonCountry in vk["response"]["items"])
            result.Add(JsonConvert.DeserializeObject<Country>(jsonCountry.ToString()));
        return result;
    }
    public static async Task<string> GetRequestAsync(string url)
    {
        using (var httpClient = new HttpClient())
            return await httpClient.GetStringAsync(url);
    }
    public class Country
    {
        public int Cid { get; set; }
        public string Title { get; set; }
        override public string ToString()
        {
            return Title;
        }
    }

}

}

使用

Xamarin 窗体时,最好使用可移植类项目而不是共享。 在我看来。

此外,重要的是,不要将静态用于异步

调用。 将Async视为类似于JAVA中的AsyncTask。 他们没有阻止。

public class ListMaker
    {
        public List<Country> GetCountyList()
        {
            return GetCountryListAsync().Result;
        }
        private async Task<List<Country>> GetCountryListAsync()
        {
            var result = new List<Country>();
            var task =
                await GetRequestAsync(@"http://api.vk.com/method/database.getCountries?need_all=1&v=5.60");
            var vk = JObject.Parse(task);
            foreach (var jsonCountry in vk["response"]["items"])
                result.Add(JsonConvert.DeserializeObject<Country>(jsonCountry.ToString()));
            return result;
        }
        private async Task<string> GetRequestAsync(string url)
        {
            using (var httpClient = new HttpClient())
                return await httpClient.GetStringAsync(url);
        }
        public class Country
        {
            public int Cid { get; set; }
            public string Title { get; set; }
            public new string ToString()
            {
                return Title;
            }
        }
    }

现在您已经有了您的类,您可以创建它的实例并执行它。

注意:- 我的例子或这个例子中的异步和等待是不正确的。

它应该真正冒泡到在类语句中具有属性和 void 的父类。

public async void TheLister()
{
    var listMaker = new ListMaker();
    var countryList = await listmaker.GetCountryListAsync();
    // Do something with countryList
}

相关内容

  • 没有找到相关文章

最新更新