Youtube播放器因在android中提供java.lang.IllegalStateException:android.os.DeadObjectException而崩溃

Youtube播放器因在android中提供java.lang.IllegalStateException:android.os.DeadObjectException而崩溃,android,android-youtube-api,Android,Android Youtube Api,我正在做一个项目。我在活动中使用了YouTubeAndroidPlayerAPI和Webview。 当我尝试运行一个id为的视频时,它会运行。问题是,如果视频id为null,则我没有按照代码中的说明运行或初始化视频,然后它会给我以下logcat输出,我的应用程序会崩溃,并给出消息“不幸的是,您的管道已停止”。有谁能帮助我,因为我做了很多搜索,但找不到任何解决方案。 我的活动扩展了SherlockYouTubeActivity。SherlockYouTubeActivity包含SherlockAc

我正在做一个项目。我在活动中使用了
YouTubeAndroidPlayerAPI
Webview
。 当我尝试运行一个id为的视频时,它会运行。问题是,如果视频id为null,则我没有按照代码中的说明运行或初始化视频,然后它会给我以下logcat输出,我的应用程序会崩溃,并给出消息“不幸的是,您的管道已停止”。有谁能帮助我,因为我做了很多搜索,但找不到任何解决方案。 我的活动扩展了SherlockYouTubeActivity。
SherlockYouTubeActivity
包含SherlockActivity代码,但除了
Activity
之外,它扩展了
YouTubeAsActivity
。因此,通过这样做,我通过
多级继承将
sherlock活动
youtube活动
扩展到了我的活动

我的
LogCat输出如下所示:-

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

}
我的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>

我的活动课如下:-

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

}
公共类StoryDetail扩展了SherlockYouTubeActivity实现
YouTubeplyer.OnInitializedListener
{
私有字符串sVideoId;
公共字符串html;
弦散乱;
共享引用sPref;
私人YouTueplayer和YPlayer;
私有静态最终字符串YoutubeDeveloperKey=“MY\u YOUTUBE\u DEVELOPER\u KEY”;
私有静态最终整数恢复对话框请求=1;
公共布尔值netConnected=false;
网络视图内容;
网络视图我的网络视图;
网络视图;
TextView-tnone;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.story_detail2);
Bundle b=新Bundle();
b=getIntent().getExtras();
//获取视频ID。。。
sVideoId=b.getString(“videoId”);
YouTubePlayerView youTubeView=(YouTubePlayerView)findViewById(R.id.youtube\u视图);
if(sVideoId!=null)
{
试一试{
初始化(YoutubeDeveloperKey,this);
}
捕获(非法状态){
e、 printStackTrace();
}
}
否则{
youTubeView.setVisibility(8);//消失
}
ActionBar=getSupportActionBar();
bar.setDisplayShowTitleEnabled(假);
bar.setDisplayUseLogoEnabled(false);
bar.setDisplayHomeAsUpEnabled(真);
tNoNet=(TextView)findViewById(R.id.tNoNet);
检查InternetConnection();
//创建一个图像加载器
//mImageLoader=新的图像加载器(3);
//将DfpAdView作为资源查找并加载请求。
DfpAdView=(DfpAdView)this.findviewbyd(R.id.adView);
adView.loadAd(新地址());
//去田里
content=(WebView)findviewbyd(R.id.content);
content.getSettings().setPluginState(PluginState.ON_DEMAND);
content.getSettings().setJavaScriptEnabled(true);
content.getSettings().setAllowFileAccess(true);
setWebChromeClient(新的WebChromeClient());
setWebViewClient(新的MyAppWebViewClient());
html=“要在WEBVIEW上显示的某些内容”;
content.loadDataWithBaseURL(“http://bgr.in/,html,“text/html”,“UTF-8”,以及“);
}
公共检查Internet连接(){
//这里有一些代码。。。
}
@凌驾
public void onBackPressed()
{
if(content.canGoBack()){
content.goBack();
}
其他的
super.onBackPressed();
}
/**
*菜单处理
*/
@凌驾
公共布尔onCreateOptions菜单(菜单){
MenuInflater充气器=getSupportMenuInflater();
充气机。充气(右菜单。故事细节,菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例R.id.share:
/**
*这里有一些代码
*/
返回true;
案例R.id.评论:
/**
*这里有一些代码
*/
返回true;
案例android.R.id.home:
//当按下Home(向上)按钮时,这将被调用
//在操作栏中。
/**
*这里有一些代码
*/
返回true;
}
返回super.onOptionsItemSelected(项目);
}
@凌驾
公共无效暂停(){
super.onPause();
content.onPause();
}
@凌驾
恢复时公开作废(){
super.onResume();
content.onResume();
}
@凌驾
受保护的空onDestroy(){
super.ondestory();
content.loadUrl(“关于:空白”);
}
@凌驾
public void onInitializationFailure(提供程序arg0,
YouTube初始化结果(arg1){
//TODO自动生成的方法存根
如果(arg1.isUserRecoverableError()){
arg1.getErrorDialog(这是恢复对话框请求).show();
}否则{
String errorMessage=String.format(
“初始化YouTubePlayer时出错”,
arg1.toString());
}
}
@凌驾
public void onInitializationSuccess(提供程序arg0、YouTubeplyer arg1、,
布尔值(arg2){
//TODO自动生成的方法存根
如果(!arg2){
YPlayer=arg1;
if(sVideoId!=null){
试一试{
YPlayer.loadVideo(sVideoId);
}
捕获(非法状态){
e、 printStackTrace();
}
}