Каждый разработчик мобильных приложений сталкивается с асинхронной загрузкой данных с внешнего API.
Так как мы ведем разработку для всех платформ(iOS, Android, WinPhone) на c#, то мы написали единый метод для асинхронной загрузки данных. Этот метод работает на всех платформах и использует конструкцию async/await, что позволяет существенно сократить количество строк кода при программировании асинхронных методов.
Так как в нашем случае API возвращает json строку, то в своем методе мы используем generic конструкцию, что позволяет десериализовать ответ в нужный класс.
Ниже представлен исходный код метода с комментариями:
public static class WebServiceAsync { //url - http ссылка метода API public static async Task< T > Get(string url) { if (string.IsNullOrEmpty(url)) { throw new NullReferenceException("Url is null."); } using (HttpClientHandler handler = new HttpClientHandler()) { //Включаем декомпрессию при необходимости if (handler.SupportsAutomaticDecompression) { handler.AutomaticDecompression = DecompressionMethods.Deflate; } using (HttpClient httpClient = new HttpClient(handler)) { string data = await httpClient.GetStringAsync(url).ConfigureAwait(false); if (!string.IsNullOrEmpty(data)) { //Десериализум ответ в класс с использованием библиотеки Json.NET return JsonConvert.DeserializeObject< T >(data); } return default(T); } } } }]]>