#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 градусов, экран перерисовывался, и я мог видеть, что запрос сработал.