Xamarin Forms: GetAsync не работает в обработчике событий SearchBar - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь создать простое приложение, которое позволяет пользователю искать фильмы с помощью themoviedb api. Если я жестко закодирую свой поисковый запрос в OnAppearing моего метода, GetAsync работает отлично. Однако, если я попытаюсь взять поисковый запрос от пользователя в обработчике события SearchBar_TextChanged, GetAsync зависнет и никогда не вернется. В течение нескольких дней я искал решение, которое, как я полагаю, связано с тем, что я неправильно управляю своими вызовами await и async или что-то связано с событием TextChanged, блокирующим запрос. Вот мой код, заранее спасибо за любые решения / предложения.

public partial class MovieSearch : ContentPage
{
    private HttpClient _client = new HttpClient();
    private const string URL = "movie?api_key=9d9cb312367f0f2deaa383f9a8fd64d2&query=";//not the full link

    public MovieSearch()
    {

        InitializeComponent();
    }

    async void SearchBar_TextChanged(object sender, Xamarin.Forms.TextChangedEventArgs e)
    {
        if (e.NewTextValue == null)
            return;
        if (String.IsNullOrEmpty(e.NewTextValue))
            return;

        var response = await _client.GetAsync(URL + e.NewTextValue);
        var content = await response.Content.ReadAsStringAsync();
        var root = JsonConvert.DeserializeObject<RootObject>(content);
        movieListView.ItemsSource = root.results;
        movieListView.IsVisible = root.results.Any();
        label.IsVisible = !movieListView.IsVisible;
    }
}
...