2014-09-09 2 views
2

Я работаю над проектом. Я использую YouTubeAndroidPlayerAPI и Webview в своей деятельности. Когда я пытаюсь запустить видео с его идентификатором, он запускается. Проблема в том, что если идентификатор видео равен NULL, то я не запускаю или не инициализирую видео, как описано в коде, тогда он дает мне следующий вывод logcat, и мое приложение получает сбой с сообщением "Unfortunately You tube has stopped". Может ли кто-нибудь помочь мне, поскольку я много раз искал, но не смог найти решение. Моя деятельность - SherlockYouTubeActivity. Код SherlockYouTubeActivity содержит код SherlockActivity, но в дополнение к Activty он расширяет YouTubeBaseActivity. Следовательно, сделав это, я распространил как SherlockActivity, так и YouTubeBaseActivity на мою деятельность через Multilevel Inheritance.Сбой игрока Youtube с предоставлением java.lang.IllegalStateException: android.os.DeadObjectException в Android

Мой LogCat Output выглядит следующим образом: -

09-09 18:41:18.201: E/AndroidRuntime(25534): FATAL EXCEPTION: main 
09-09 18:41:18.201: E/AndroidRuntime(25534): java.lang.IllegalStateException: android.os.DeadObjectException 
09-09 18:41:18.201: E/AndroidRuntime(25534): at com.google.android.youtube.api.jar.client.RemoteEmbeddedPlayer.K(SourceFile:229) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at com.google.android.apps.youtube.api.jar.a.a.a(SourceFile:62) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at com.google.android.apps.youtube.api.jar.a.s.b(SourceFile:945) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at com.google.android.apps.youtube.api.jar.y.a(SourceFile:180) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at com.google.android.apps.youtube.api.jar.a.a.k(SourceFile:576) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at com.google.android.youtube.api.jar.client.RemoteEmbeddedPlayer.e(SourceFile:51) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at com.google.android.youtube.api.jar.client.c.run(SourceFile:715) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at android.os.Handler.handleCallback(Handler.java:730) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at android.os.Looper.loop(Looper.java:176) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at android.app.ActivityThread.main(ActivityThread.java:5419) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at java.lang.reflect.Method.invokeNative(Native Method) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at java.lang.reflect.Method.invoke(Method.java:525) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at dalvik.system.NativeStart.main(Native Method) 
09-09 18:41:18.201: E/AndroidRuntime(25534): Caused by: android.os.DeadObjectException 
09-09 18:41:18.201: E/AndroidRuntime(25534): at android.os.BinderProxy.transact(Native Method) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at com.google.android.apps.youtube.api.b.a.aq.e(SourceFile:466) 
09-09 18:41:18.201: E/AndroidRuntime(25534): at com.google.android.youtube.api.jar.client.RemoteEmbeddedPlayer.K(SourceFile:226) 
09-09 18:41:18.201: E/AndroidRuntime(25534): ... 15 more 

Мой файл XML как: -

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <com.google.ads.doubleclick.DfpAdView 
     android:id="@+id/adView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:gravity="center" 
     android:layout_centerHorizontal="true" 
     ads:adUnitId="MYADDID" 
     ads:adSize="BANNER" 
     /> 
    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:id="@+id/ScrollView_StoryDetails2" 
     android:layout_above="@+id/adView"> 

    <RelativeLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center"> 

    <WebView android:id="@+id/content" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     /> 

    <com.google.android.youtube.player.YouTubePlayerView 
     android:id="@+id/youtube_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/content" 
     android:layout_alignParentBottom="true" 
     android:layout_marginBottom="5dp" 
     /> 
    </RelativeLayout> 
    </ScrollView> 



     <TextView 
      android:id="@+id/tNoNet" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:text="No Internet Connection, Reading Offline." 
      android:layout_centerHorizontal="true" 
      android:textColor="#000000" 
      android:layout_gravity="center_horizontal" 
      android:textStyle="bold" 
      android:textSize="12sp" 
      android:typeface="serif" 
      android:background="#FF7E00" 
      android:paddingLeft="5dp" 
      android:paddingRight="5dp" 
      android:paddingTop="3dp" 
      android:paddingBottom="3dp"/> 

</RelativeLayout> 

Мой класс активность выглядит следующим образом: -

public class StoryDetail extends SherlockYouTubeActivity implements 
YouTubePlayer.OnInitializedListener 
{ 

    private String sVideoId; 
    public String html; 
    String sCategory; 

    SharedPreferences sPref; 

    private YouTubePlayer YPlayer; 
    private static final String YoutubeDeveloperKey = "MY_YOUTUBE_DEVELOPER_KEY"; 
    private static final int RECOVERY_DIALOG_REQUEST = 1; 

    public boolean netConnected=false; 

    WebView content; 
    WebView myWebView; 
    WebView wvAdd; 
    TextView tNoNet; 
    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.story_detail2); 

     Bundle b=new Bundle(); 
     b=getIntent().getExtras(); 

    // Get the vedioId... 
      sVideoId = b.getString("videoId"); 

       YouTubePlayerView youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view); 
     if(sVideoId!=null) 
     { 
      try{ 
      youTubeView.initialize(YoutubeDeveloperKey, this); 
      } 
      catch(IllegalStateException e){ 
       e.printStackTrace(); 
      } 
     } 
     else{ 
      youTubeView.setVisibility(8);//Gone 
     } 


     ActionBar bar = getSupportActionBar(); 
     bar.setDisplayShowTitleEnabled(false); 
     bar.setDisplayUseLogoEnabled(false); 
     bar.setDisplayHomeAsUpEnabled(true); 

     tNoNet=(TextView)findViewById(R.id.tNoNet); 

     checkInternetConnection(); 

     // Create an image loader 
     //mImageLoader = new ImageLoader(3); 

     // Look up the DfpAdView as a resource and load a request. 
     DfpAdView adView = (DfpAdView)this.findViewById(R.id.adView); 
     adView.loadAd(new AdRequest()); 

     // Get the fields 
     content = (WebView) findViewById(R.id.content); 
     content.getSettings().setPluginState(PluginState.ON_DEMAND); 
     content.getSettings().setJavaScriptEnabled(true); 
     content.getSettings().setAllowFileAccess(true); 
     content.setWebChromeClient(new WebChromeClient()); 
     content.setWebViewClient(new MyAppWebViewClient()); 

    html = "<html>SOME_STUFFS TO SHOW ON WEBVIEW</html>"; 

    content.loadDataWithBaseURL("http://bgr.in/", html, "text/html", "UTF-8", ""); 

    } 

    public checkInternetConnection(){ 
    // Some Code Goes Here... 
    } 


    @Override 
    public void onBackPressed() 
    { 
     if(content.canGoBack()){ 
      content.goBack(); 

     } 
     else 
      super.onBackPressed(); 
    } 
    /** 
    * Menu handling 
    */ 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getSupportMenuInflater(); 
     inflater.inflate(R.menu.story_detail, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.share: 
       /** 
       *Some Code Goes Here     
       */ 
       return true; 
      case R.id.comments: 
       /** 
       *Some Code Goes Here     
       */ 
       return true; 
      case android.R.id.home: 
       // This is called when the Home (Up) button is pressed 
       // in the Action Bar. 
       /** 
       *Some Code Goes Here     
       */ 
       return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     content.onPause(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     content.onResume(); 

     } 
    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     content.loadUrl("about:blank"); 

    } 

    @Override 
    public void onInitializationFailure(Provider arg0, 
      YouTubeInitializationResult arg1) { 
     // TODO Auto-generated method stub 
     if (arg1.isUserRecoverableError()) { 
      arg1.getErrorDialog(this, RECOVERY_DIALOG_REQUEST).show(); 
     } else { 
      String errorMessage = String.format(
        "There was an error initializing the YouTubePlayer", 
        arg1.toString()); 
     } 
    } 


    @Override 
    public void onInitializationSuccess(Provider arg0, YouTubePlayer arg1, 
      boolean arg2) { 
     // TODO Auto-generated method stub 
     if (!arg2) { 
      YPlayer = arg1; 
      if(sVideoId!=null){ 
       try{ 
       YPlayer.loadVideo(sVideoId); 
       } 
       catch(IllegalStateException e){ 
        e.printStackTrace(); 
       } 
      } 
      } 

    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == RECOVERY_DIALOG_REQUEST) { 
     // Retry initialization if user performed a recovery action 
     if(sVideoId!=null){ 
      getYouTubePlayerProvider().initialize(YoutubeDeveloperKey, this); 
     } 

    } 
    } 

    protected YouTubePlayer.Provider getYouTubePlayerProvider() { 
    return (YouTubePlayerView) findViewById(R.id.youtube_view); 
    } 

} 

Любая помощь быть оцененным из нижней части сердца. Спасибо заранее ..

ответ

6

Ну выше коды прекрасно работают сейчас, все, что создавали это исключение было то, что некоторые из VedioId были утратившими некоторые из них были «», следовательно, VedioId, значение которого было "", создало для меня исключение, поскольку я проверял только нулевые значения, а не значение "" VedioId. Теперь проблема решена.

Если кому-то нужно использовать код YoutubeAndroidAPI, вы можете просто использовать вышеуказанный код. Он отлично работает даже в деятельности Шерлока.

Спасибо за обратные ссылки тех, кто пытался и поддерживал меня.

+0

Спасибо за повтор, но я не могу понять. где вы проверили для "" значения videoId в коде? Я не вижу этого. благодаря – GmloMalo

0

Попробуйте поймать все исключения вместо того, чтобы только поймать

IllegalStateException

заменить ваш код этой

if(sVideoId!=null){ 
      try{ 
      YPlayer.loadVideo(sVideoId); 
      } 
      catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 

обрабатывать все исключения. Сделайте что-нибудь, когда вы получаете

android.os.DeadObjectException

+0

делать то, что именно? – EpicPandaForce

+0

хорошо, я тоже это сделал, ошибка остается прежней. первый раз работает (то есть, видео не отображается, а представление исчезает или скрывается), но во второй раз видео инициализируется там, где sVideoId по-прежнему остается нулевым. Любые подсказки ... –

0

Просьба обновить приложение до последней версии Youtube и начать работу

Смежные вопросы