2017-09-24 2 views
0

현재 Android 지원 라이브러리의 MediaBrowser compat을 사용하는 클라이언트/서비스 접근 방식을 사용하는 간단한 미디어 플레이어를 개발 중입니다. 그래서 분명히 플레이어의 상태를 나타내는 int를 반환 할 수 없습니다,Android : 미디어 브라우저 클라이언트의 재생 상태가 null 포인터 예외를 반환합니다.

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) 

내가 이해하는 컨트롤러 나 playbackstate 중 하나가 null 있다는 것입니다 :

나는 다음과 같은 예외를 받고 있어요. 나는 전송 컨트롤 구축 방법

@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(); 
     } 

그리고 여기에 : 여기

내가 MediaBrowser에 콜백에서 onConnected() 메소드에서 클라이언트 활동의 컨트롤러를 만드는 방법입니다

private void buildTransportControls() { 
    ImageButton mBotonPausa = (ImageButton) findViewById(R.id.mostrar_audiolibro_playpause); 
    mBotonPausa.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      MediaControllerCompat mediaControllerCompat = MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this); 
      int estado = mediaControllerCompat.getPlaybackState().getState(); 
      if(estado == PlaybackStateCompat.STATE_PLAYING){ 
       MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this).getTransportControls().pause(); 
      }else if (estado == PlaybackStateCompat.STATE_PAUSED){ 
       MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this).getTransportControls().play(); 
      }else{ 
       Bundle extras = new Bundle(); 
       extras.putString("titulo",MostrarAudiolibroActivity.this.audiolibro.getTitulo()); 
       extras.putString("autor",MostrarAudiolibroActivity.this.audiolibro.getAutor()); 
       MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this).getTransportControls().playFromUri(Uri.parse(MostrarAudiolibroActivity.this.audiolibro.getLinkAudiolibro()),extras); 
       Log.d(tag,"Voy a tratar de abrir el audio"); 
      } 
     } 
    }); 
    ImageButton mBotonReiniciar = (ImageButton) findViewById(R.id.mostrar_audiolibro_reiniciar); 
    mBotonReiniciar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this).getTransportControls().seekTo(0); 
      //MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this).getTransportControls().play(); 
     } 
    }); 


} 

무엇 나는 잘못하고있다. 미리 감사드립니다.

답변

0

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 
} 
int estado = playbackStateCompat.getState();