HttpClient на Xamarin.Формы Android не отвечают и зависают (Prism)

#c# #xamarin.forms #xamarin.android #httpclient #prism

#c# #xamarin.forms #xamarin.android #httpclient #prism

Вопрос:

У меня есть очень простое приложение MVVM, использующее Xamrin Forms и Prism, созданное на основе шаблона Prism Xamarin.

Когда я инициализирую новую ViewModel, я пытаюсь вызвать API, на UWP это работает без каких-либо проблем, но на Android он просто зависает и не возвращает никаких ошибок или не выдает никаких исключений.

Я упростил код до того места, где возникает ошибка, и протестировал его с помощью URI, который может использовать любой.

 public async Task InitializeAsync(INavigationParameters parameters)
    {
        try
        {
            var client = new HttpClient();
            
            var response = await client.GetAsync("https://www.google.co.uk").ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine(ex.Message);
        }
    }
 

Я использую приведенные ниже NuGets

  • Prism.Core v8.0.0.1909
  • Prism.Dryloc.Forms v8.0.0.1909
  • Xamarin.Forms v4.8.0.1687

Я установил реализацию HttpClient для Android и встроенного TLS 1.2 введите описание изображения здесь

Я просмотрел несколько других сообщений, которые кажутся похожими, но не получили удовольствия от устранения проблемы, может кто-нибудь пролить свет на то, как я могу устранить это или заставить его работать?

Комментарии:

1. Взгляните на эту ссылку на реализацию

Ответ №1:

У меня была такая же проблема, когда я начал работать с Xamarin.

Я также создал библиотеку, которая могла бы вам очень помочь, под названием Rest.API.Translator, вы также можете найти ее в nuget

Теперь, если вы не хотите работать с моей библиотекой, вы могли бы взглянуть на мой код здесь, чтобы узнать, как я устранил проблему с зависанием.

Взгляните на

 Client.GetAsync(new Uri(url)).Await()
 

.Await это расширение, которое я создал, чтобы убедиться, что между HTTP-вызовами не возникает проблем с перекрытием и зависанием

Комментарии:

1. Прежде всего, спасибо вам за то, что откликнулись. Здорово, что вы пишете библиотеку, которую можно использовать, и делитесь ею; однако это не дает ответа на вопрос о том, что происходит не так и как я устраняю неполадки. Знаете ли вы, в чем проблема или как ее можно перестрелять (расстрелять)?

Ответ №2:

После некоторого устранения неполадок и биения головой о кирпичную стену я, наконец, понял, что пошло не так.

Ничего!

Пошаговое выполнение на Android не проходило мимо строки 7 ниже, и экран не перерисовывался.

 var response = await client.GetAsync("https://www.google.co.uk").ConfigureAwait(false);
 

Когда я поворачивал телефон на 90 градусов, экран перерисовывался, и я мог видеть, что запрос сработал.