使用Google Media Framework Exoplayer的视频播放器空指针异常 [英] Video Player Null Pointer Exception using Google Media Framework Exoplayer
问题描述
我正在使用 GMF 示例在我的应用中播放视频正在从实时JSON获取视频标题和网址,这是我的JSON示例:
I am using GMF sample to play Video in my app, where I am fetching video title and url from live JSON, here is the sample of my JSON :
{
"videos": [
{
"title":"Video 1",
"url":"88.mp4"
},
{
"title":"Video 2",
"url":"l5.mp4"
}
]}
这就是我的代码:
MainActivity.java:
JSONObject jsono = new JSONObject(data);
JSONArray jarray = jsono.getJSONArray("videos");
for (int i = 0; i < jarray.length(); i++) {
JSONObject object = jarray.getJSONObject(i);
Videos video = new Videos();
video.setTitle(object.getString("title"));
video.setUrl(object.getString("url"));
videosArrayList.add(video);
}
无论何时,我都会点击任意列表项以播放视频,并显示NPE
,请参阅完整的日志:
Whenever, I do tap on any of the list item to play Video, getting NPE
, see complete Log:
03-17 13:14:34.667 18799-18799/com.google.googlemediaframeworkdemo.demo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.google.googlemediaframeworkdemo.demo, PID: 18799
java.lang.NullPointerException
at com.google.android.libraries.mediaframework.exoplayerextensions.RendererBuilderFactory.createRendererBuilder(RendererBuilderFactory.java:34)
at com.google.android.libraries.mediaframework.layeredvideo.LayerManager.<init>(LayerManager.java:78)
at com.google.android.libraries.mediaframework.layeredvideo.SimpleVideoPlayer.<init>(SimpleVideoPlayer.java:112)
at com.google.android.libraries.mediaframework.layeredvideo.SimpleVideoPlayer.<init>(SimpleVideoPlayer.java:81)
at com.google.googlemediaframeworkdemo.demo.adplayer.ImaPlayer.<init>(ImaPlayer.java:388)
at com.google.googlemediaframeworkdemo.demo.adplayer.ImaPlayer.<init>(ImaPlayer.java:434)
at com.google.googlemediaframeworkdemo.demo.adplayer.ImaPlayer.<init>(ImaPlayer.java:467)
at com.google.googlemediaframeworkdemo.demo.MainActivity$1.onItemClick(MainActivity.java:81)
at android.widget.AdapterView.performItemClick(AdapterView.java:299)
at android.widget.AbsListView.performItemClick(AbsListView.java:1152)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3014)
at android.widget.AbsListView$3.run(AbsListView.java:3865)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5299)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
at dalvik.system.NativeStart.main(Native Method)
03-17 13:14:34.803 18799-18861/com.google.googlemediaframeworkdemo.demo D/dalvikvm: threadid=17: interp stack at 0x56eb0000
03-17 13:14:34.803 18799-18861/com.google.googlemediaframeworkdemo.demo D/dalvikvm: init ref table
03-17 13:14:34.803 18799-18861/com.google.googlemediaframeworkdemo.demo D/dalvikvm: init mutex
03-17 13:14:34.903 18799-18861/com.google.googlemediaframeworkdemo.demo D/MediatekClassFactory: createInstance(): Begin = 9861250
03-17 13:14:34.904 18799-18861/com.google.googlemediaframeworkdemo.demo D/MediatekClassFactory: create Instance with : interface com.mediatek.common.telephony.IOnlyOwnerSimSupport
03-17 13:14:34.912 18799-18861/com.google.googlemediaframeworkdemo.demo W/MediatekClassFactory: Tablet not exist!, Get obj from default class
03-17 13:14:34.916 18799-18861/com.google.googlemediaframeworkdemo.demo D/MediatekClassFactory: create Instance from tablet library : com.mediatek.tb.telephony.OnlyOwnerSimSupport
03-17 13:14:34.920 18799-18861/com.google.googlemediaframeworkdemo.demo D/MediatekClassFactory: createInstance(): End = 9861267
我写了我认为应该的代码,所以我可以知道我在哪里吗?我想念什么?以及我该如何解决?
I wrote code as I think it should be, so may I know where I am missing ? what I am missing ? and how can i resolve it ?
推荐答案
在此部分代码中
Videos video = new Videos();
video.setTitle(object.getString("title"));
video.setUrl(object.getString("url"));
videosArrayList.add(video);
您永远不会在Videos
对象video
中分配video
字段(从不调用
public void setVideo(Video video) { this.video = video; }
).您使用默认的构造函数p ublic Videos() { }
,该构造函数将字段video
初始化为null
you never assign the video
field in Videos
object video
( never call
public void setVideo(Video video) { this.video = video; }
). You use the default constructor public Videos() { }
which initializes the field video
to null
要解决此问题,请添加此行
To solve this issue add this line
video.setVideo(new Video(object.getString("url"),VideoType.MP4)))
这篇关于使用Google Media Framework Exoplayer的视频播放器空指针异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!