我正在开展一个项目。我在我的活动中使用了YouTubeAndroidPlayerAPI
和Webview
。
当我尝试运行带有id的视频时,它会运行。问题是但是如果视频id为null,那么我没有像代码中所解释的那样运行或初始化视频,那么它给了我以下logcat输出,并且我的应用程序因为给出"Unfortunately You tube has stopped"
消息而崩溃。任何人都可以帮助我,因为我做了很多搜索,但无法找到任何解决方案。
我的活动扩展了SherlockYouTubeActivity
。 SherlockYouTubeActivity
包含SherlockActivity代码,但尽管Activty
它扩展了YouTubeBaseActivity
。因此,我通过SherlockActivity
将YouTubeBaseActivity
和Multilevel Inheritance
扩展到了我的活动。
我的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);
}
}
任何帮助都会从心底获得赞赏。在此先感谢..
答案 0 :(得分:6)
以上代码工作正常,所有创建该异常的是,一些VideoId为null,有些是&#34;&#34;因此VideoId的值是&#34;&#34;正在创建一个例外,因为我只检查空值而不是&#34;&#34; VideoId的值。现在问题得到了解决。
如果任何人需要使用Youtube Android API代码,可以简单地使用上面的代码。它甚至在Sherlock Activity中也能正常工作。
感谢那些试过并支持我的人的反馈。
答案 1 :(得分:0)
尝试捕获所有异常而不是仅捕获
IllegalStateException异常
替换你的代码
if(sVideoId!=null){
try{
YPlayer.loadVideo(sVideoId);
}
catch(Exception e){
e.printStackTrace();
}
}
处理所有异常。什么时候做点什么
android.os.DeadObjectException
答案 2 :(得分:0)
请将您的应用更新到最新版本的Youtube并开始工作