在Android中使用YouTube数据Api

在Android中使用YouTube数据Api,android,youtube-api,gdata-api,Android,Youtube Api,Gdata Api,我试图在我的android应用程序中使用YouTube数据Api。当我尝试将其作为java项目运行时,它运行良好,没有任何错误。但当我尝试在我的android应用程序中做同样的事情时,应用程序强制关闭。这是logcat的输出和我的代码 来自LOGCAT的输出 01-05 00:13:17.198: E/AndroidRuntime(627): FATAL EXCEPTION: main 01-05 00:13:17.198: E/AndroidRuntime(627): java.lang.Ex

我试图在我的android应用程序中使用YouTube数据Api。当我尝试将其作为java项目运行时,它运行良好,没有任何错误。但当我尝试在我的android应用程序中做同样的事情时,应用程序强制关闭。这是logcat的输出和我的代码

来自LOGCAT的输出

01-05 00:13:17.198: E/AndroidRuntime(627): FATAL EXCEPTION: main
01-05 00:13:17.198: E/AndroidRuntime(627): java.lang.ExceptionInInitializerError
01-05 00:13:17.198: E/AndroidRuntime(627):  at com.example.allinonedata.YouTubeManager.retrieveVideos(YouTubeManager.java:29)
...
01-05 00:13:17.198: E/AndroidRuntime(627): Caused by: java.lang.NoClassDefFoundError: com.google.gdata.data.media.MediaSource
这是密码 mainactivity.java

  package com.example.allinonedata;
 import java.util.List;

  import android.os.Bundle;
  import android.app.Activity;
  import android.view.Menu;

   public class MainActivity extends Activity {
String clientID = "JavaCodeGeeks";
String textQuery = "nexus 4";
int maxResults = 1;
boolean filter = true;
int timeout = 2000;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    YouTubeManager ym = new YouTubeManager(clientID);
    try{
    List<YouTubeVideo> videos = ym.retrieveVideos(textQuery, maxResults, filter, timeout);

    for (YouTubeVideo youtubeVideo : videos) {
        System.out.println(youtubeVideo.getWebPlayerUrl());

        System.out.println("Thumbnails");
        for (String thumbnail : youtubeVideo.getThumbnails()) {
            System.out.println("\t" + thumbnail);
        }
        System.out.println(youtubeVideo.getEmbeddedWebPlayerUrl());
        System.out.println("**************************************************");
    }
    }
    catch(Exception e)
    {

    }
}
package com.example.allinonedata;
导入java.util.List;
导入android.os.Bundle;
导入android.app.Activity;
导入android.view.Menu;
公共类MainActivity扩展了活动{
字符串clientID=“JavaCodeGeeks”;
字符串textQuery=“nexus 4”;
int-maxResults=1;
布尔过滤器=真;
int超时=2000;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
YouTubeManager ym=新的YouTubeManager(clientID);
试一试{
List videos=ym.retrieveVideos(textQuery、maxResults、filter、timeout);
用于(YouTubeVideo YouTubeVideo:视频){
System.out.println(youtubeVideo.getWebPlayerUrl());
System.out.println(“缩略图”);
对于(字符串缩略图:youtubeVideo.getThumbnails()){
System.out.println(“\t”+缩略图);
}
System.out.println(youtubeVideo.getEmbeddedWebPlayerUrl());
System.out.println(“*******************************************************************”);
}
}
捕获(例外e)
{
}
}
}

youtubemanager.java

 package com.example.allinonedata;

 import java.net.URL;
 import java.util.LinkedList;
 import java.util.List;

 import com.google.gdata.client.youtube.YouTubeQuery;
 import com.google.gdata.client.youtube.YouTubeService;
 import com.google.gdata.data.media.mediarss.MediaThumbnail;
 import com.google.gdata.data.youtube.VideoEntry;
 import com.google.gdata.data.youtube.VideoFeed;
 import com.google.gdata.data.youtube.YouTubeMediaContent;
 import com.google.gdata.data.youtube.YouTubeMediaGroup;

 public class YouTubeManager {

private static final String YOUTUBE_URL = "http://gdata.youtube.com/feeds/api/videos";
private static final String YOUTUBE_EMBEDDED_URL = "http://www.youtube.com/v/";

private String clientID;

public YouTubeManager(String clientID) {
    this.clientID = clientID;
}

public List<YouTubeVideo> retrieveVideos(String textQuery, int maxResults, 
        boolean filter, int timeout) throws Exception {

    YouTubeService service = new YouTubeService(clientID);
    service.setConnectTimeout(timeout); // millis
    YouTubeQuery query = new YouTubeQuery(new URL(YOUTUBE_URL));

    query.setOrderBy(YouTubeQuery.OrderBy.RELEVANCE);
    query.setFullTextQuery(textQuery);
    query.setSafeSearch(YouTubeQuery.SafeSearch.NONE);
    query.setMaxResults(maxResults);

    VideoFeed videoFeed = service.query(query, VideoFeed.class);        
    List<VideoEntry> videos = videoFeed.getEntries();

    return convertVideos(videos);

}

private List<YouTubeVideo> convertVideos(List<VideoEntry> videos) {

    List<YouTubeVideo> youtubeVideosList = new LinkedList<YouTubeVideo>();

    for (VideoEntry videoEntry : videos) {

        YouTubeVideo ytv = new YouTubeVideo();

        YouTubeMediaGroup mediaGroup = videoEntry.getMediaGroup();
        String webPlayerUrl = mediaGroup.getPlayer().getUrl();
        ytv.setWebPlayerUrl(webPlayerUrl);

        String query = "?v=";
        int index = webPlayerUrl.indexOf(query);
        String embeddedWebPlayerUrl = webPlayerUrl.substring(index+query.length());
        embeddedWebPlayerUrl = YOUTUBE_EMBEDDED_URL + embeddedWebPlayerUrl;
        ytv.setEmbeddedWebPlayerUrl(embeddedWebPlayerUrl);

        List<String> thumbnails = new LinkedList<String>();
        for (MediaThumbnail mediaThumbnail : mediaGroup.getThumbnails()) {
            thumbnails.add(mediaThumbnail.getUrl());
        }           
        ytv.setThumbnails(thumbnails);

        List<YouTubeMedia> medias = new LinkedList<YouTubeMedia>();
        for (YouTubeMediaContent mediaContent : mediaGroup.getYouTubeContents()) {
            medias.add(new YouTubeMedia(mediaContent.getUrl(), mediaContent.getType()));
        }
        ytv.setMedias(medias);

        youtubeVideosList.add(ytv);

    }

    return youtubeVideosList;

}
package com.example.allinonedata;
导入java.net.URL;
导入java.util.LinkedList;
导入java.util.List;
导入com.google.gdata.client.youtube.youtube;
导入com.google.gdata.client.youtube.youtube服务;
导入com.google.gdata.data.media.mediarss.MediaThumbnail;
导入com.google.gdata.data.youtube.VideoEntry;
导入com.google.gdata.data.youtube.VideoFeed;
导入com.google.gdata.data.youtube.youtube内容;
导入com.google.gdata.data.youtube.YouTubeMediaGroup;
公共类YouTube管理员{
私有静态最终字符串YOUTUBE_URL=”http://gdata.youtube.com/feeds/api/videos";
私有静态最终字符串YOUTUBE\u EMBEDDED\u URL=”http://www.youtube.com/v/";
私有字符串clientID;
公共YouTubeManager(字符串clientID){
this.clientID=clientID;
}
公共列表检索视频(字符串textQuery、int-maxResults、,
布尔过滤器,int超时)引发异常{
YouTube服务=新的YouTube服务(客户端ID);
service.setConnectTimeout(超时);//毫秒
YOUTUBE查询=新建YOUTUBE查询(新URL(YOUTUBE_URL));
query.setOrderBy(YouTubeQuery.OrderBy.RELEVANCE);
query.setFullTextQuery(textQuery);
query.setSafeSearch(YouTubeQuery.SafeSearch.NONE);
query.setMaxResults(maxResults);
VideoFeed=service.query(query,VideoFeed.class);
List videos=videoFeed.getEntries();
返回视频(视频);
}
私人列表视频(列表视频){
List youtubeVideosList=newlinkedlist();
用于(视频输入视频输入:视频){
YouTubeVideo ytv=新的YouTubeVideo();
youtubemediagroupmediagroup=videoEntry.getMediaGroup();
字符串webPlayerUrl=mediaGroup.getPlayer().getUrl();
ytv.setWebPlayerUrl(webPlayerUrl);
字符串查询=“?v=”;
int index=webplayerrl.indexOf(查询);
字符串embeddedWebPlayerUrl=webPlayerUrl.substring(index+query.length());
embeddedWebPlayerUrl=YOUTUBE_EMBEDDED_URL+embeddedWebPlayerUrl;
ytv.setEmbeddedWebPlayerUrl(embeddedWebPlayerUrl);
列表缩略图=新建LinkedList();
对于(MediaThumbnail MediaThumbnail:mediaGroup.getThumbnails()){
添加(mediaThumbnail.getUrl());
}           
ytv.设置缩略图(缩略图);
列表媒体=新建链接列表();
对于(YouTubeMediaContent:mediaGroup.getYouTubeContents()){
添加(新的YouTubeMedia(mediaContent.getUrl(),mediaContent.getType());
}
ytv.setMedias(medias);
youtubeVideosList.add(ytv);
}
返回youtubeVideosList;
}

}

谷歌api java客户端(与gdata客户端不同,它确实支持Android)以前不支持Youtube数据api,但随着v3的发布,这一点现在得到了纠正;这个客户端现在有很好的Youtube支持,可以为您提供所需的内容。有关详细信息和代码示例,请参见此处:

还有这里的入门指南


请参阅关于相同问题的讨论YouTube/GData Java客户端库与Android不兼容@MatiasMolinas好的…还有其他api我可以使用吗?我可以使用json或jsonc吗?