Android Studio中获取YouTubePlayer引用时应用崩溃求助
解决android-youtube-player库空指针崩溃问题
问题根源
你的代码里youTubePlayer和youTubePlayerView两个变量都未初始化,点击按钮调用playvideo方法时,youTubePlayer仍为null,直接调用loadVideo会触发空指针异常导致应用崩溃。另外,该库要求必须将YouTubePlayerView与Activity生命周期绑定,否则也会引发异常。
修复步骤
- 在
onCreate方法中获取YouTubePlayerView实例,并绑定生命周期。 - 通过添加
AbstractYouTubePlayerListener监听器,在onReady回调中获取有效的YouTubePlayer实例。 - 在
playvideo方法中增加非空判断,避免空指针异常。
修改后的完整代码
package com.example.youtuuuuuuuuuuuuuuube; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer; import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.AbstractYouTubePlayerListener; import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView; public class MainActivity extends AppCompatActivity { private YouTubePlayer youTubePlayer; private YouTubePlayerView youTubePlayerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取YouTubePlayerView实例 youTubePlayerView = findViewById(R.id.youtube_player_view); // 绑定生命周期,此方法必须调用 getLifecycle().addObserver(youTubePlayerView); // 添加监听器,获取初始化后的YouTubePlayer实例 youTubePlayerView.addYouTubePlayerListener(new AbstractYouTubePlayerListener() { @Override public void onReady(YouTubePlayer initializedYouTubePlayer) { // 保存可用的player实例 youTubePlayer = initializedYouTubePlayer; } }); } public void playvideo(View v){ // 先判断player是否已初始化,避免空指针 if(youTubePlayer != null){ youTubePlayer.loadVideo("S0Q4gqBUs7c", 1f); } } }
额外说明
- 你XML中设置的
app:videoId和app:autoPlay属性可保留,库会自动处理;若代码中也设置了加载视频,以代码逻辑优先级更高。 - 确保已正确添加库依赖,且在Manifest中声明了网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
内容的提问来源于stack exchange,提问作者Diaa
相关产品推荐
相关产品推荐

