尝试使用 ExoPlayer 初始化流式传输时出现 NullPointerException?
Getting a NullPointerException when trying to initialize streaming using ExoPlayer?
我正在开发的应用程序使用通用媒体播放器或 Nex Player 来播放其视频文件。我的任务是让它使用 Google ExoPlayer 而不是我一直在努力实现的。但是,由于作为 exoplayer2 包一部分的 Util class 中出现 NullPointerException,我无法初始化 ExoPlayer class。
下面的方法已经在我的代码中实现了,用于初始化native player和nexplayer。
private void onLaunchStreamingSuccess() {
final Context context = MediaDetailsStageButtons.this.getContext();
final Intent intent = new Intent(context, ExoStreamingPlaybackScreen.class);
intent.putExtra( AbstractMediaDetailsScreen.EXTRA_MEDIA_ID, MediaDetailsStageButtons.this.mMedia.getID() );
context.startActivity(intent);
}
调用 startActivity 后,应用程序崩溃并显示以下日志语句
11-09 11:45:10.163 27482 27482 E QewErrorReporter: Entered uncaughtException [caught Exception: Unable to instantiate activity ComponentInfo{com.directv.application.android.go.production/com.morega.qew.ui.streaming.ExoStreamingPlaybackScreen}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference]
11-09 11:45:10.163 27482 27482 E QewErrorReporter: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.directv.application.android.go.production/com.morega.qew.ui.streaming.ExoStreamingPlaybackScreen}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3096)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3352)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.app.ActivityThread.access00(ActivityThread.java:223)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1797)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.os.Handler.dispatchMessage(Handler.java:102)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.os.Looper.loop(Looper.java:158)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.app.ActivityThread.main(ActivityThread.java:7231)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at java.lang.reflect.Method.invoke(Native Method)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.content.ContextWrapper.getPackageManager(ContextWrapper.java:97)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at com.google.android.exoplayer2.util.Util.getUserAgent(Util.java:676)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at com.morega.qew.ui.streaming.ExoStreamingPlaybackScreen.<init>(ExoStreamingPlaybackScreen.java:88)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at java.lang.Class.newInstance(Native Method)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.app.Instrumentation.newActivity(Instrumentation.java:1096)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3086)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: ... 9 more
进入 Util class,方法 'getUserAgent' 是出现问题的地方,特别是在 try 块的第二行。
public static String getUserAgent(Context context, String applicationName) {
String versionName;
try {
String packageName = context.getPackageName();
PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);
versionName = info.versionName;
} catch (NameNotFoundException e) {
versionName = "?";
}
return applicationName + "/" + versionName + " (Linux;Android " + Build.VERSION.RELEASE
+ ") " + "ExoPlayerLib/" + ExoPlayerLibraryInfo.VERSION;}
这可能只是我对 Android 缺乏经验,这就是我无法解决此问题的原因,但我希望得到一些帮助以解决此问题。
ExoStreamingPlaybackScreen.java
的 line 88
正在打什么电话?看起来这就是崩溃发生的地方。
可能是您传入的Context
是null
。
我正在开发的应用程序使用通用媒体播放器或 Nex Player 来播放其视频文件。我的任务是让它使用 Google ExoPlayer 而不是我一直在努力实现的。但是,由于作为 exoplayer2 包一部分的 Util class 中出现 NullPointerException,我无法初始化 ExoPlayer class。
下面的方法已经在我的代码中实现了,用于初始化native player和nexplayer。
private void onLaunchStreamingSuccess() {
final Context context = MediaDetailsStageButtons.this.getContext();
final Intent intent = new Intent(context, ExoStreamingPlaybackScreen.class);
intent.putExtra( AbstractMediaDetailsScreen.EXTRA_MEDIA_ID, MediaDetailsStageButtons.this.mMedia.getID() );
context.startActivity(intent);
}
调用 startActivity 后,应用程序崩溃并显示以下日志语句
11-09 11:45:10.163 27482 27482 E QewErrorReporter: Entered uncaughtException [caught Exception: Unable to instantiate activity ComponentInfo{com.directv.application.android.go.production/com.morega.qew.ui.streaming.ExoStreamingPlaybackScreen}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference]
11-09 11:45:10.163 27482 27482 E QewErrorReporter: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.directv.application.android.go.production/com.morega.qew.ui.streaming.ExoStreamingPlaybackScreen}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3096)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3352)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.app.ActivityThread.access00(ActivityThread.java:223)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1797)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.os.Handler.dispatchMessage(Handler.java:102)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.os.Looper.loop(Looper.java:158)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.app.ActivityThread.main(ActivityThread.java:7231)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at java.lang.reflect.Method.invoke(Native Method)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.content.ContextWrapper.getPackageManager(ContextWrapper.java:97)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at com.google.android.exoplayer2.util.Util.getUserAgent(Util.java:676)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at com.morega.qew.ui.streaming.ExoStreamingPlaybackScreen.<init>(ExoStreamingPlaybackScreen.java:88)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at java.lang.Class.newInstance(Native Method)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.app.Instrumentation.newActivity(Instrumentation.java:1096)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3086)
11-09 11:45:10.163 27482 27482 E QewErrorReporter: ... 9 more
进入 Util class,方法 'getUserAgent' 是出现问题的地方,特别是在 try 块的第二行。
public static String getUserAgent(Context context, String applicationName) {
String versionName;
try {
String packageName = context.getPackageName();
PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);
versionName = info.versionName;
} catch (NameNotFoundException e) {
versionName = "?";
}
return applicationName + "/" + versionName + " (Linux;Android " + Build.VERSION.RELEASE
+ ") " + "ExoPlayerLib/" + ExoPlayerLibraryInfo.VERSION;}
这可能只是我对 Android 缺乏经验,这就是我无法解决此问题的原因,但我希望得到一些帮助以解决此问题。
ExoStreamingPlaybackScreen.java
的 line 88
正在打什么电话?看起来这就是崩溃发生的地方。
可能是您传入的Context
是null
。