2013-01-04 4 views
3

내 Android 앱에서 YouTube Data API를 사용하려고합니다. Java 프로젝트로 실행하려고하면 오류없이 정상적으로 실행됩니다. 그러나 내 안드로이드 응용 프로그램에서 동일한 일을하려고하면 응용 프로그램 강제 종료합니다. 다음은 logcat과 내 코드의 출력입니다. 로그 캣 HEREAndroid에서 YouTube Data Api 사용

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 

FROM

출력 CODE mainactivity.java IS

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) 
    { 

    } 
} 

}

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; 

} 
}

+1

보고 여기에 가이드를 시작 [이] (https://groups.google.com/forum/? fromgroups = #! topic/youtube-api-gdata/GkJWSkIYwXs) –

+0

YouTube/GData Java 클라이언트 라이브러리는 Android와 호환되지 않습니다. https://groups.google.com/forum/#!msg/youtube-api-gdata/GkJWSkIYwXs/i7wflv7l_KwJ –

+0

@MatiasMolinas 좋습니다 ... 사용할 수있는 다른 API가 있습니까? json 또는 jsonc를 사용할 수 있습니까? – dnivra

답변

1

이전에 Youtube Data API를 지원하지 않았지만 v3이 릴리스 된 google-api-java-client (gdata-client와는 달리 안드로이드 지원)는 이제 수정되었습니다. 지금 당신에게 필요한 것을 제공해야하는이 클라이언트와 함께 좋은 유튜브 지원이 있습니다. 자세한 내용 및 코드 샘플 여기를 참조하십시오 :

https://developers.google.com/api-client-library/java/apis/youtube/v3

도 얻기로는

https://developers.google.com/youtube/v3/getting-started

관련 문제