Youtube player crashes with giving java.lang.IllegalStateException: android.os.DeadObjectException in Android

女生的网名这么多〃 提交于 2019-12-10 11:14:07

问题


I am working on a project. I am using YouTubeAndroidPlayerAPI and Webview in my activity. when I try to run a video with its id, it runs. Problem is but if the video id is null, then I am not running or initializing the video as explained in the code, then It gives me the following logcat output and my application gets crash with giving the message as "Unfortunately You tube has stopped". Can anyone help me as I had done lot of searches but couldn't find any solution. My Activity extends SherlockYouTubeActivity. The SherlockYouTubeActivity contains the SherlockActivity code but inspite of Activty it extends the YouTubeBaseActivity. Hence by doing so I had extended both the SherlockActivity and YouTubeBaseActivity to my Activity via Multilevel Inheritance.

My LogCat Output is as Follows:-

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

My XML file is as:-

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

My Activity Class is as Follows:-

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);
    }

}

Any Help would be Appreciated from the Bottom of the Heart. Thanks in Advance..


回答1:


Well above code work fine now, All what was creating that exception was that, some of the VideoId were null and some were "" hence the VideoId whose value was "" was creating an the exception to me as I was only checking for null values and not for "" value of VideoId. Now the issue is resolved.

If any one need to use Youtube Android API code can simply use the above code. It works fine even in Sherlock Activity.

Thanks for the feedsbacks of those who tried and supported me.




回答2:


Try catching all exceptions instead of only catching

IllegalStateException

replace your code like this

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

handle all exceptions. Do something when you get

android.os.DeadObjectException




回答3:


Kindly Update your app to the latest version of Youtube and it starts working



来源:https://stackoverflow.com/questions/25747226/youtube-player-crashes-with-giving-java-lang-illegalstateexception-android-os-d

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!