2015-11-27 74 views
0

我想在我的android應用中嵌入youtube視頻。渲染錯誤#Youtube播放器

但我無法渲染xml,因此應用程序崩潰。

XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context=".WelcomePage"> 
    <com.google.android.youtube.player.YouTubePlayerView 
     android:id="@+id/youtube_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 
</LinearLayout> 

WelcomePage.java

public class WelcomePage extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {

渲染xml文檔時出現錯誤堆棧。

java.lang.IllegalStateException: A YouTubePlayerView can only be created with an Activity which extends YouTubeBaseActivity as its context. at com.google.android.youtube.player.YouTubePlayerView.<init>(Unknown Source) at com.google.android.youtube.player.YouTubePlayerView.<init>(Unknown Source) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:408) at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:437) at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:154) at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:93) at com.android.tools.idea.rendering.LayoutlibCallbackImpl.loadView(LayoutlibCallbackImpl.java:190) at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:247) at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:171) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:835) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70) at android.view.LayoutInflater.rInflate(LayoutInflater.java:811) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798) at android.view.LayoutInflater.inflate(LayoutInflater.java:515) at android.view.LayoutInflater.inflate(LayoutInflater.java:394) at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:223) at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:426) at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:350) at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:511) at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:499) at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:888) at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:499) at com.android.tools.idea.rendering.RenderTask.access$600(RenderTask.java:72) at com.android.tools.idea.rendering.RenderTask$3.call(RenderTask.java:611) at com.android.tools.idea.rendering.RenderTask$3.call(RenderTask.java:608) at com.android.tools.idea.rendering.RenderService.runRenderAction(RenderService.java:363) at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:608) at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:630) at com.intellij.android.designer.designSurface.AndroidDesignerEditorPanel$6.run(AndroidDesignerEditorPanel.java:480) at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320) at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310) at com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:254) at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269) at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227) at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217) at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238) at com.intellij.util.Alarm$Request$1.run(Alarm.java:351) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

我會很感激,如果有人可以幫助我在這裏。我不知道這裏有什麼問題。

編輯:添加活動代碼。

'公共類WelcomePage擴展YouTubeBaseActivity實現YouTubePlayer.OnInitializedListener {

private static final int RECOVERY_REQUEST = 1; 
private YouTubePlayerView youTubeView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_welcomepage); 

    youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view); 
    youTubeView.initialize(Config.YOUTUBE_API_KEY, this); 
} 

@Override 
public void onInitializationSuccess(Provider provider, YouTubePlayer player, boolean wasRestored) { 
    if (!wasRestored) { 
     player.cueVideo("fhWaJi1Hsfo"); // Plays https://www.youtube.com/watch?v=fhWaJi1Hsfo 
    } 
} 
@Override 
public void onInitializationFailure(Provider provider, YouTubeInitializationResult errorReason) { 
    if (errorReason.isUserRecoverableError()) { 
     errorReason.getErrorDialog(this, RECOVERY_REQUEST).show(); 
    } else { 
     String error = String.format(getString(R.string.player_error), errorReason.toString()); 
     Toast.makeText(this, error, Toast.LENGTH_LONG).show(); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == RECOVERY_REQUEST) { 
     // Retry initialization if user performed a recovery action 
     getYouTubePlayerProvider().initialize(Config.YOUTUBE_API_KEY, this); 
    } 
} 

protected Provider getYouTubePlayerProvider() { 
    return youTubeView; 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
      return true; 
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

      if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

}`

感謝。

+0

你在你初始化YouTubePlayerView活動onCreate方法?你能發佈你的活動代碼嗎? – willermo

+0

是的,我正在使用onCreate方法初始化YouTubePlayerView。我正在添加有問題的活動代碼。謝謝。 – driftking9987

回答

0

檢查您的strings.xml文件,這就是爲什麼我反正得到一個紅色R.id錯誤...