Android:媒体浏览器客户端上的播放状态返回空指针异常

时间:2017-09-24 03:38:03

标签: android mediabrowser

我目前正在使用Android支持库中的MediaBrowser compat使用客户端/服务方法开发一个简单的媒体播放器。

我遇到以下异常:

try JSONSerialization.jsonObject(with: data, options: []) as! [Any]

我的理解是控制器或回放状态都为空,所以很明显它不能返回代表玩家状态的int。

以下是我如何在MediaBrowser回调的onConnected()方法中的客户端活动上创建控制器:

FATAL EXCEPTION: main
Process: valdivia.peter.inclubooks, PID: 32383
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.support.v4.media.session.PlaybackStateCompat.getState()' on a null object reference
at valdivia.peter.inclubooks.activities.MostrarAudiolibroActivity$3.onClick(MostrarAudiolibroActivity.java:118)
at android.view.View.performClick(View.java:5201)
at android.view.View$PerformClick.run(View.java:at android.os.Handler.handleCallback(Handler.java:
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

这里是我如何构建传输控件:

@Override
        public void onConnected() {
            super.onConnected();
            Log.d(tag,"Conecté al servicio");
            Log.d(tag,"token:" + mMediaBrowser.getSessionToken().toString());
            try{
                controller = new MediaControllerCompat(getApplicationContext(),mMediaBrowser.getSessionToken());
            }catch(RemoteException exception){
                Log.d(tag,"Remote Exception al crear el Media Controller");
                Toast.makeText(getApplicationContext(),"Error al crear los controles de la sesión",Toast.LENGTH_LONG).show();
                return;
            }
            controller.registerCallback(mControllerCallback);
            MediaControllerCompat.setMediaController(MostrarAudiolibroActivity.this,controller);
            buildTransportControls();
        }

我做错了什么。提前谢谢。

1 个答案:

答案 0 :(得分:1)

MediaControllerCompat.getPlaybackState()的调用可以并且返回null。 documentation for that method表示返回null是可能的。您必须更改代码以允许这种可能性。

更具体地说,这一行:

int estado = mediaControllerCompat.getPlaybackState().getState();

必须分成多个部分:

PlaybackStateCompat playbackStateCompat = mediaControllerCompat.getPlaybackState();
if (playbackStateCompat == null) {
    // handle the case that it's null
} else {
    int estado = playbackStateCompat.getState();
}