youtube数据api v3 android AbstractGoogleClientRequest.execute()ioexception

youtube数据api v3 android AbstractGoogleClientRequest.execute()ioexception,android,youtube-data-api,Android,Youtube Data Api,我试图在android应用程序上搜索youtube视频。我使用youtube数据api v3。我使用示例代码 我在这一行收到ioexception: // Call the API and print results. SearchListResponse searchResponse = search.execute(); 我的主要活动是: package com.yasin_alm.bestsongsplaylistsyoutube; import java.io.IOException

我试图在android应用程序上搜索youtube视频。我使用youtube数据api v3。我使用示例代码

我在这一行收到ioexception:

// Call the API and print results.
SearchListResponse searchResponse = search.execute();
我的主要活动是:

package com.yasin_alm.bestsongsplaylistsyoutube;

import java.io.IOException;
import java.util.List;

import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

import com.astuetz.PagerSlidingTabStrip;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayer.OnInitializedListener;
import com.google.android.youtube.player.YouTubePlayer.Provider;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.youtube.YouTube;
import com.google.api.services.youtube.model.SearchListResponse;
import com.google.api.services.youtube.model.SearchResult;

public class MainActivity extends ActionBarActivity implements OnInitializedListener {

    public static final String DEVELOPER_KEY="my api key from console.developer.com";
    public static final String TAG="bestsongs";

    private ViewPager pager;    
    private TabsPagerAdapter pagerAdapter;
    private PagerSlidingTabStrip tabs;
    private String searchQuery="pop songs";

    private static final long NUMBER_OF_VIDEOS_RETURNED = 25;

    /**
     * Define a global instance of a Youtube object, which will be used
     * to make YouTube Data API requests.
     */
    private static YouTube youtube;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        doSearch();

        NowPlayingFragment nowPlayingFragmentFragment = NowPlayingFragment.newInstance("nCgQDjiotG0");
        //getSupportFragmentManager().beginTransaction().replace(R.layout.fragment_nowplaying, nowPlayingFragmentFragment).commit();

        // Initialise the ViewPager and set an adapter
        pager = (ViewPager) findViewById(R.id.pager_main);
        pager.setOffscreenPageLimit(3); //# of fragments loading
        pagerAdapter=new TabsPagerAdapter(getSupportFragmentManager(),getResources().getStringArray(R.array.tab_titles));
        pagerAdapter.add(nowPlayingFragmentFragment);
        pager.setAdapter(pagerAdapter);

        // Bind the tabs to the ViewPager
        tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);

        tabs.setViewPager(pager);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onInitializationFailure(Provider provider,
            YouTubeInitializationResult error) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player,
            boolean wasRestored) {
        if (!wasRestored) {
            player.cueVideo("nCgQDjiotG0");
        }
    }

    /**
     * Initialize a YouTube object to search for videos on YouTube. Then
     * display the name and thumbnail image of each video in the result set.
     *
     * @param args command line args.
     */
    public void doSearch() {

        try {
            // This object is used to make YouTube Data API requests. The last
            // argument is required, but since we don't need anything
            // initialized when the HttpRequest is initialized, we override
            // the interface and provide a no-op function.
            youtube = new YouTube.Builder(new NetHttpTransport(), new JacksonFactory(), new HttpRequestInitializer() {
                public void initialize(HttpRequest request) throws IOException {
                }
            }).setApplicationName("BestSongsPlaylistsYoutube").build();

            Log.d(TAG, "a");
            // Define the API request for retrieving search results.
            YouTube.Search.List search = youtube.search().list("id,snippet");

            // Set your developer key from the Google Developers Console for
            // non-authenticated requests. See:
            // https://console.developers.google.com/
            search.setKey(DEVELOPER_KEY);
            search.setQ(searchQuery);

            // 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/thumbnails/default/url)");
            search.setMaxResults(NUMBER_OF_VIDEOS_RETURNED);

            Log.d(TAG, "b");
            // Call the API and print results.
            SearchListResponse searchResponse = search.execute();
            Log.d(TAG, "c");
            List<SearchResult> searchResultList = searchResponse.getItems();
            if (searchResultList != null) {
                //prettyPrint(searchResultList.iterator(), queryTerm);
                Log.d(TAG,"video: "+searchResultList.get(0).getId().getVideoId());
            }
        } catch (GoogleJsonResponseException e) {
            Log.e(TAG,"There was a service error: " + e.getDetails().getCode() + " : "
                    + e.getDetails().getMessage());
        } catch (IOException e) {
            Log.e(TAG,"IOException: " + e.getCause() + " : " + e.getMessage() +" : "+ e.getLocalizedMessage());
            e.printStackTrace();
        } 
    }
}
我检查了类似的问题,我已经:

  • 已尝试使用服务器应用程序的密钥而不是Android应用程序的密钥
  • 已尝试使用适用于浏览器应用程序的密钥,而不是适用于Android应用程序的密钥
  • 选中sha1和包名

有什么建议吗?我只想在我的android应用程序中搜索youtube上的视频。提前感谢。

已解决:您需要使用浏览器键访问Youtube数据API。Android密钥仅用于Youtube播放器

此外:

您可以尝试删除您的项目,并在google开发者控制台上从头开始重置所有内容


我在一个异步任务中实现了搜索功能。

解决了:您需要使用浏览器键访问Youtube数据API。Android密钥仅用于Youtube播放器

此外:

您可以尝试删除您的项目,并在google开发者控制台上从头开始重置所有内容


我在一个异步任务中实现了搜索功能。

解决了:您需要使用浏览器键访问Youtube数据API。Android密钥仅用于Youtube播放器

此外:

您可以尝试删除您的项目,并在google开发者控制台上从头开始重置所有内容


我在一个异步任务中实现了搜索功能。

解决了:您需要使用浏览器键访问Youtube数据API。Android密钥仅用于Youtube播放器

此外:

您可以尝试删除您的项目,并在google开发者控制台上从头开始重置所有内容


我在一个异步任务中实现了搜索功能。

你救了我的命谢谢你救了我的命谢谢你救了我的命谢谢你救了我的命谢谢
08-30 01:55:14.659: D/bestsongs(14223): a
08-30 01:55:14.689: D/bestsongs(14223): b
08-30 01:55:14.726: E/bestsongs(14223): IOException: null : null : null