YouTube.Search.List搜索没有返回任何内容

时间:2017-08-04 23:12:00

标签: java android arraylist youtube-data-api

我正在开发一款实施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。

Logcat.png

非常感谢任何帮助,因为我很困惑。

0 个答案:

没有答案
相关问题