//关键词搜索 private async void SearchButton_Click(object sender, RoutedEventArgs e) { if (Search.Text != "") { ProgressRingInListPage.IsActive = true; ProgressRingInListPage.Visibility = Visibility.Visible; try { int tmp = 0; for (int i = 1; i <= 5; i++) { //请求电影 String url = String.Format("https://api.themoviedb.org/3/search/movie?api_key=7888f0042a366f63289ff571b68b7ce0&query={0}&page={1}", Search.Text, i); HttpClient client = new HttpClient(); String Jresult = await client.GetStringAsync(url); DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(QueryMovieList)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(Jresult)); QueryMovieList queryMovieList = (QueryMovieList)serializer.ReadObject(ms); //请求电视剧 url = String.Format("https://api.themoviedb.org/3/search/tv?api_key=7888f0042a366f63289ff571b68b7ce0&query={0}&page={1}", Search.Text, i); Jresult = await client.GetStringAsync(url); serializer = new DataContractJsonSerializer(typeof(QueryTVList)); ms = new MemoryStream(Encoding.UTF8.GetBytes(Jresult)); QueryTVList queryTVList = (QueryTVList)serializer.ReadObject(ms); if (queryMovieList.total_results + queryTVList.total_results == 0) { await new Windows.UI.Popups.MessageDialog("Found nothing, please change the key words and try again! ").ShowAsync(); break; } else { if (tmp == 0) { viewModel.clear(); } tmp++; foreach (var result in queryMovieList.results) { if (result.poster_path != null) { result.poster_path = "https://image.tmdb.org/t/p/w500" + result.poster_path; } else { result.poster_path = "Assets/defaultPoster.jpg"; } viewModel.AddMovieResult(result); } foreach (var result in queryTVList.results) { if (result.poster_path != null) { result.poster_path = "https://image.tmdb.org/t/p/w500" + result.poster_path; } else { result.poster_path = "Assets/defaultPoster.jpg"; } viewModel.AddTVResult(result); } } } } catch { await new Windows.UI.Popups.MessageDialog("Opps! Something wrong happened to the connection, please check your network and try again! ").ShowAsync(); } //Kill the waiting ring. ProgressRingInListPage.IsActive = false; ProgressRingInListPage.Visibility = Visibility.Collapsed; } else { await new Windows.UI.Popups.MessageDialog("Please enter key words first! ").ShowAsync(); } }
//private void showProgressRing() { // MyProgressRing.IsActive = true; // MyProgressRing.Visibility = Visibility.Visible; //} //private void killProgressRing() { // MyProgressRing.IsActive = false; // MyProgressRing.Visibility = Visibility.Collapsed; //} private async void InitializeList() { try { if (!first) { ListFrame.Navigate(typeof(ListPage), VideoTypeComboBox.SelectedIndex); } //如果选择的是电影类型 if (VideoTypeComboBox.SelectedIndex == 0) { //API请求,language是电影语言, page是搜索的页,用于支持翻页功能,翻一次页请求一次(API本身的限制只能这么做), Mgenre电影的类型, releaseYear电影放映日期, sortBy电影以热度还是评分排序 String url = String.Format("https://api.themoviedb.org/3/discover/movie?api_key=7888f0042a366f63289ff571b68b7ce0&include_adult=false{0}&page={1}{2}{3}{4}", language, page, Mgenre, releaseYear, sortBy); HttpClient client = new HttpClient(); String Jresult = await client.GetStringAsync(url); //本想把这句放在最前面,跳转更快,但是ListFrame实例化需要一点时间,放在前面会报空指针的错误,只好先请求网络给程序一点时间 if (first) { first = false; ListFrame.Navigate(typeof(ListPage), 0); } //Where is the Show progress ring code? Not here! //Written in XAML for initialization!!! //序列化电影列表,通过其解析Json,Models中除了Starlist,其他类都是通过网站json2csharp.com自动生成的 DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(QueryMovieList)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(Jresult)); QueryMovieList queryMovieList = (QueryMovieList)serializer.ReadObject(ms); //没有这类型的电影 if (queryMovieList.total_results == 0) { await new Windows.UI.Popups.MessageDialog("Found nothing, please change the key words and try again! ").ShowAsync(); } else { viewModel.clear(); foreach (var result in queryMovieList.results) { //该电影有海报 if (result.poster_path != null) { //修改为能访问的网址 result.poster_path = "https://image.tmdb.org/t/p/w500" + result.poster_path; } //没有海报 else { //使用默认海报 result.poster_path = "Assets/defaultPoster.jpg"; } //添加到ViewModel viewModel.AddMovieResult(result); } } } else { //同理 String url = String.Format("https://api.themoviedb.org/3/discover/tv?api_key=7888f0042a366f63289ff571b68b7ce0&include_adult=false{0}&page={1}{2}{3}", language, page, Tgenre, sortBy); HttpClient client = new HttpClient(); String Jresult = await client.GetStringAsync(url); if (first) { first = false; ListFrame.Navigate(typeof(ListPage), 1); } DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(QueryTVList)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(Jresult)); QueryTVList queryTVList = (QueryTVList)serializer.ReadObject(ms); if (queryTVList.total_results == 0) { await new Windows.UI.Popups.MessageDialog("Found nothing, please change the key words and try again! ").ShowAsync(); } else { viewModel.clear(); foreach (var result in queryTVList.results) { if (result.poster_path != null) { result.poster_path = "https://image.tmdb.org/t/p/w500" + result.poster_path; } else { result.poster_path = "Assets/defaultPoster.jpg"; } viewModel.AddTVResult(result); } } } } catch { await new Windows.UI.Popups.MessageDialog("Opps! Something wrong happened to the connection, please check your network and try again! ").ShowAsync(); } finally { MyProgressRing.IsActive = false; MyProgressRing.Visibility = Visibility.Collapsed; } }