我正在尝试制作一个简单的应用程序,使用户能够使用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;
}
}