0

我正在尝试制作一个简单的应用程序,使用户能够使用 themoviedb api 搜索电影。如果我在 OnAppearing 我的方法中对搜索查询进行硬编码,GetAsync 可以完美运行。但是,如果我尝试在 SearchBar_TextChanged 事件处理程序中从用户那里获取搜索词,GetAsync 将挂起并且永远不会返回。我已经搜索了几天的解决方案,我认为这与我对等待和异步调用管理不善有关,或者与阻止请求的 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;
    }
}
4

1 回答 1

0

在请求另一个请求之前,您需要使用 TaskCancellationToken 并取消请求。

于 2021-08-12T15:02:28.077 回答