我正在开发一款实施SearchView的应用,用于通过关键字获取YouTube视频结果。然后通过缩略图URL,视频标题,频道名称和视频视图来细化结果,其值存储在ArrayList中。然后,ArrayList将值发送到java类,然后将这些结果放入ListView中以生成"结果"对于用户来说非常类似于YouTube应用返回视频的方式。我使用的是YouTube Data API V3,并使用了Google示例代码中经过略微修改的代码。这是我的searchview监听器代码。
searchingList是我想要将字符串值发送到的ArrayList。
searchYouTube = (SearchView)findViewById(R.id.videoSearch);
searchYouTube.setQueryHint("Search for a YouTube video");
searchYouTube.setOnQueryTextListener(new SearchView.OnQueryTextListener()
{
@Override
public boolean onQueryTextSubmit(String s) {
String query = searchYouTube.getQuery().toString();
searchedList.clear();
try {
new YouTube.Builder(new NetHttpTransport(), new JacksonFactory(), new HttpRequestInitializer() {
public void initialize(HttpRequest request) throws IOException {
}
}).setApplicationName("myApp").build();
// Define the API request for retrieving search results.
YouTube.Search.List search = youtube.search().list("id,snippet");
// Set your developer key from the Google Cloud Console for
// non-authenticated requests. See:
// https://cloud.google.com/console
search.setKey(apiKey);
search.setQ(query);
// Restrict the search results to only include videos. See:
// https://developers.google.com/youtube/v3/docs/search/list#type
search.setType("video");
// To increase efficiency, only retrieve the fields that the
// application uses.
search.setFields("items(id/kind,id/videoId,snippet/title,snippet/channelTitle,snippet/thumbnails/default/url)");
search.setMaxResults(NUMBER_OF_VIDEOS_RETURNED);
SearchListResponse searchResponse = search.execute();
List<SearchResult> searchResultList = searchResponse.getItems();
if (searchResultList != null) {
apppendToSearchArray(searchResultList.iterator(), query);
}
} catch (GoogleJsonResponseException e) {
System.err.println("There was a service error: " + e.getDetails().getCode() + " : "
+ e.getDetails().getMessage());
} catch (IOException e) {
System.err.println("There was an IO error: " + e.getCause() + " : " + e.getMessage());
} catch (Throwable t) {
t.printStackTrace();
}
return false;
}
@Override
public boolean onQueryTextChange(String s) {
return false;
}
});
这是我的方法&appendToSearchArray&#39;在上面的代码中调用的方法实际上将所需的值按顺序放入ArrayList。
private static void apppendToSearchArray(Iterator<SearchResult> iteratorSearchResults, String query) {
if (!iteratorSearchResults.hasNext()) {
System.out.println(" There aren't any results for your query.");
}
while (iteratorSearchResults.hasNext()) {
SearchResult singleVideo = iteratorSearchResults.next();
ResourceId rId = singleVideo.getId();
// Confirm that the result represents a video. Otherwise, the
// item will not contain a video ID.
if (rId.getKind().equals("youtube#video")) {
Thumbnail thumbnail = singleVideo.getSnippet().getThumbnails().getDefault();
VideoDetails singleVidDetails = new VideoDetails(thumbnail.getUrl().toString(),singleVideo.getSnippet().getTitle().toString(),singleVideo.getSnippet().getChannelTitle().toString(),"0");
searchedList.add(singleVidDetails);
}
}
}
&#34; VideoDetails&#34;是我创建的一个java类,它实际上充当了检索缩略图,标题,通道和视图的String值的媒介,并将这些字符串发送到实际将它们实现到我的ListView中的适配器类。但是,当运行应用程序并通过SearchView提交查询时,列表视图不会显示任何新结果。这是我的logcat。
非常感谢任何帮助,因为我很困惑。