마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

클래스에서 다른클래스로 메세지 전달할때 null point 에러가 생기는 이유 질문입니다.

0 추천
안녕하세요, 아주 기본적인 내용일지도모르는데 지금 하다가 헷갈려서 혼란스럽습니다.

 

요지는 A클래스의 a 메소드에선 센서를 측정하고있습니다.

 

B클래스의 생성자에선 미디어플레이어를 플레이하고 있습니다

 

a메소드에서 일정시간 사용자의 입력이 없을때 상황을 정의하고

 

a메소드내부에 B클래스 선언 및 생성

 

B클래스에 구현해놓은

 

MediaPlayerPause(){

mediaPlayer.pause();

}

 

를 불러왔습니다  B.MediaPlayerPause();

 

이랬더니 널포인트 에러가 나더군요. 제가 뭔가 지금 잘못알고 있는건가요>?

 

이해를 돕기위해 간단한 소스 첨부하겠습니다

 

클래스 A(센서측정클래스) implements SensorEventListener

...

....

public void onSensorChanged(SensorEvent event)

{

     float g = 자이로센서측정;

    B b = new B(context);(동영상재생클래스)

    일정시간동안 입력이없는것을 측정하는 메소드{

         if(움직임없으면)

           b.mediapause();

        else(움직이면)

          b.mediastart();

      }

}

클래스 B (동영상 재생클래스)

public class B

{

    public MediaPlayer mediaPlayer;

    public B(Context context)

    {

        this.context =context;

        surfaceTexture = ~~~;

       Surface surface = new Surface(surfaceTexture);

       mediaPlayer = MediaPlayer.create(context,.....);

       mediaPlayer.setSurface(surface);

       mediaPlayer.start();

       mediaPlayer.setLooping(true);

    }

.....................

    public void mediapause()

    {

           mediaPlayer.pause();

   }

   public void mediastart()

   {

            mediaPlayer.start();

   }

}
심슨사랑 (690 포인트) 님이 2015년 4월 14일 질문

3개의 답변

+2 추천

onSensorChanged는 1초에도 수십(?)번 호출될텐데 그때마다 

B b = new B(context);(동영상재생클래스); 를 하는것은... 아니라고 봅니다.

A클래스에서 B를 한번만 생성해야 합니다.

아래와 같이 수정해서 해보시기 바랍니다.

if (b == null) {

    b = new B(context)

}

Gradler (109,780 포인트) 님이 2015년 4월 14일 답변
답변 감사합니다 도움이 되었습니다
0 추천

class B에서 public static MediaPlayer mediaPlayer; 로 선언 해보세요.

익명사용자 님이 2015년 4월 14일 답변
답변 감사합니다 도움이 되었습니다
0 추천
아무거나냐님의 의견처럼

A class 의 생성자에서 최초한번만 B class를 생성하셔서 사용하셔야겠습니다.

onSensorChanged가 불려질때마다 생성시키면 아까 그넘이 이넘이 아닌것이 되겠지요.

이때 B class의 메소드를 콜하는것은 의미가 없을것으로...
nicehee (73,100 포인트) 님이 2015년 4월 14일 답변
답변 감사합니다 도움이 되었습니다
...