Xamarin API VK列表形成

时间:2017-01-06 19:31:02

标签: c# json linq http json.net

我正在尝试为一项工作做资格工作,并且在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;
        }
    }


}

}

1 个答案:

答案 0 :(得分:0)

使用Xamarin Forms时,最好使用Portable Class Projects而不是Shared。在我看来。

同样重要的是,静态不会特别用于异步调用。将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;
            }
        }
    }

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

注意: - 我的示例中的Async和Await,或者这个不正确。

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

public async void TheLister()
{
    var listMaker = new ListMaker();
    var countryList = await listmaker.GetCountryListAsync();

    // Do something with countryList
}