Android: YouTube API с использованием API уровня 11 (или выше)

1

Я разрабатываю приложение для Android, и я хочу найти первый результат в youtube для данного запроса.

Во-первых, я начал использовать следующий URL:

"http://gdata.youtube.com/feeds/api/videos?q="+ query + "&max-results=1"

Он отлично подходит для уровня API Android 10 (или меньше), но он не работает для уровня API 11 (или выше).

Затем я попытался использовать Youtube API. Первоначально у меня были ошибки с SAXParser, но тогда все работает нормально. Еще раз, он отлично подходит для уровня API 10 (или ниже), но не работает для уровня API 11 (или выше).

Вот мой код:

try{
    YouTubeQuery query = new YouTubeQuery(new URL("http://gdata.youtube.com/feeds/api/videos"));
    query.setOrderBy(YouTubeQuery.OrderBy.RELEVANCE);
    query.setFullTextQuery(pesquisa);
    query.setMaxResults(1);

    VideoFeed videoFeed = service.query(query, VideoFeed.class);

}
catch (Exception e) {
     Log.e("Exception", "exception", e);                    
}

Этот код генерирует следующее исключение (api> = 11):

02-01 23:09:38.361: E/Exception(999): exception
02-01 23:09:38.361: E/Exception(999): android.os.NetworkOnMainThreadException
02-01 23:09:38.361: E/Exception(999):   at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
02-01 23:09:38.361: E/Exception(999):   at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
02-01 23:09:38.361: E/Exception(999):   at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
02-01 23:09:38.361: E/Exception(999):   at java.net.InetAddress.getAllByName(InetAddress.java:220)
02-01 23:09:38.361: E/Exception(999):   at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
02-01 23:09:38.361: E/Exception(999):   at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
02-01 23:09:38.361: E/Exception(999):   at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
02-01 23:09:38.361: E/Exception(999):   at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
02-01 23:09:38.361: E/Exception(999):   at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
02-01 23:09:38.361: E/Exception(999):   at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
02-01 23:09:38.361: E/Exception(999):   at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
02-01 23:09:38.361: E/Exception(999):   at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
02-01 23:09:38.361: E/Exception(999):   at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
02-01 23:09:38.361: E/Exception(999):   at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
02-01 23:09:38.361: E/Exception(999):   at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:503)
02-01 23:09:38.361: E/Exception(999):   at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:535)
02-01 23:09:38.361: E/Exception(999):   at com.google.gdata.client.Service.getFeed(Service.java:1135)
02-01 23:09:38.361: E/Exception(999):   at com.google.gdata.client.Service.getFeed(Service.java:1077)
02-01 23:09:38.361: E/Exception(999):   at com.google.gdata.client.GoogleService.getFeed(GoogleService.java:662)
02-01 23:09:38.361: E/Exception(999):   at com.google.gdata.client.Service.query(Service.java:1237)
02-01 23:09:38.361: E/Exception(999):   at com.google.gdata.client.Service.query(Service.java:1178)
02-01 23:09:38.361: E/Exception(999):   at functions.Client.getYoutubeTrailer(Client.java:493)
02-01 23:09:38.361: E/Exception(999):   at com.moviemate.Movieprofile.getLinkYoutube(Movieprofile.java:673)
02-01 23:09:38.361: E/Exception(999):   at com.moviemate.Movieprofile.access$20(Movieprofile.java:655)
02-01 23:09:38.361: E/Exception(999):   at com.moviemate.Movieprofile$Loading$13.onClick(Movieprofile.java:625)
02-01 23:09:38.361: E/Exception(999):   at android.view.View.performClick(View.java:3460)
02-01 23:09:38.361: E/Exception(999):   at android.view.View$PerformClick.run(View.java:13955)
02-01 23:09:38.361: E/Exception(999):   at android.os.Handler.handleCallback(Handler.java:605)
02-01 23:09:38.361: E/Exception(999):   at android.os.Handler.dispatchMessage(Handler.java:92)
02-01 23:09:38.361: E/Exception(999):   at android.os.Looper.loop(Looper.java:137)
02-01 23:09:38.361: E/Exception(999):   at android.app.ActivityThread.main(ActivityThread.java:4340)
02-01 23:09:38.361: E/Exception(999):   at java.lang.reflect.Method.invokeNative(Native Method)
02-01 23:09:38.361: E/Exception(999):   at java.lang.reflect.Method.invoke(Method.java:511)
02-01 23:09:38.361: E/Exception(999):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
02-01 23:09:38.361: E/Exception(999):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-01 23:09:38.361: E/Exception(999):   at dalvik.system.NativeStart.main(Native Method)

Каков наилучший способ сделать простой запрос в YouTube?

  • 0
    какая именно проблема у вас, то есть то, что, кажется, работает в API 10, но не 11?
  • 0
    Когда я использую API 11, он выдает исключение в этой строке: VideoFeed videoFeed = service.query(query, VideoFeed.class); Когда я использую api 10, я могу получить видео подачу.
Показать ещё 2 комментария
Теги:
youtube
youtube-api
android-4.0

1 ответ

3
Лучший ответ

Попробуй это

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

Проверьте версию, прежде чем применять ее, скажем, в начале действия...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню