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

안드로이드 핸들러 질문있습니다!! ㅠㅠ (소스/로그 있습니다)

0 추천
  final Runnable sendRunnalbe;
  final Handler mHandler;
  
  Intent intent = getIntent();
  
  String time = intent.getStringExtra("time");
    
  
  //================================
  //1. 알림이 울린다.
  //================================
  mp = MediaPlayer.create(this, R.drawable.alarmsong);
  mp.setLooping(false);
  mp.start();
  textViewAlarmedTime.setText(time + "(" + mp.getCurrentPosition() + "초 흐름)" );
  
  //================================
  //1-1. 10초 후에 문자 날리도록 핸들러 등록
  //================================
  sendRunnalbe = new Runnable() {
   @Override
   public void run() {
    String str_receiver = txtReceiver.getText().toString(); //str_receiver : 등록된 핸드폰 번호
    String str_message = txtMessage.getText().toString();   //str_message  : 등록된 메세지 내용
    
    mp.pause();
    //if(str_receiver.length()>0 && str_message.length()>0)
    sendSMS(str_receiver, str_message); // ===> 지정해 놓은 번호로 [문자전송]
    
       }
  };
  
  mHandler = new Handler();
  mHandler.postDelayed(sendRunnalbe, 5000); //5초 후 [sendMessage] 동작
  
  
  //=================================
  //2. 클릭이 됨과 동시에 알림 음악 중지
  //=================================
  textViewAlarmedTime.setOnClickListener(new View.OnClickListener() {
   @Override
   public void  onClick(View v) {
    mp.pause(); // 알람음이 멈춤
  
  //=================================
  //2-1. 10초후에 문자를 날리라고한 핸들러 중지
  //=================================
    mHandler.removeCallbacks(sendMessage);

    Intent intent_stopAlarm = new Intent(AlarmShowActivity.this, SubMainActivity.class);
    startActivity(intent_stopAlarm); 
   }
  });
 }
  
  

 /** 문자전송: 시작 **/
 private void sendSMS(String str_receiver, String str_message){너무 길어서 잘랐습니다.}
 /** 문자전송: 끝 **/

 @Override
 public void onClick(View v) {
  finish();
 }
}








안녕하세요.!

알람 & 문자전송에 관한 어플을 개발중인데요,

==============================================

1. 알람이 울림

1-1. 10초후에 문자를 날리도록 핸들러를 등록 한다.

2.클릭이 됨과 동시에 알림음악을 중지 시킨다.

2-1. 10초후에 문자를 날리라고 한 핸들러를 중지 시킨다.

(예전에 위의 알고리즘에 대한 힌트를 주신분 감사합니다^^)

==============================================

이런 방식으로 작동하고 개발을 하려는데, run() 부분에서부터 에러가 나는 것 같아요 ㅠㅠ

도와주세요! ㅠ.ㅠ

중요하다고 생각하는 부분은 색으로 표시해뒀습니다.

 (소스가 맨 위로 올라간 점 죄송합니다 ㅠㅠ)

다시시작해보자 (200 포인트) 님이 2014년 7월 30일 질문
다시시작해보자님이 2014년 7월 31일 수정
어떤 에러가 발생했는지 로그를 같이 올려주시면 답변하기가 더 쉬워집니다.
07-30 19:43:06.041: E/AndroidRuntime(546): FATAL EXCEPTION: main
07-30 19:43:06.041: E/AndroidRuntime(546): java.lang.NullPointerException
07-30 19:43:06.041: E/AndroidRuntime(546):     at com.andro.AlarmShowActivity$1.run(AlarmShowActivity.java:63)
07-30 19:43:06.041: E/AndroidRuntime(546):     at android.os.Handler.handleCallback(Handler.java:605)
07-30 19:43:06.041: E/AndroidRuntime(546):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-30 19:43:06.041: E/AndroidRuntime(546):     at android.os.Looper.loop(Looper.java:137)
07-30 19:43:06.041: E/AndroidRuntime(546):     at android.app.ActivityThread.main(ActivityThread.java:4424)
07-30 19:43:06.041: E/AndroidRuntime(546):     at java.lang.reflect.Method.invokeNative(Native Method)
07-30 19:43:06.041: E/AndroidRuntime(546):     at java.lang.reflect.Method.invoke(Method.java:511)
07-30 19:43:06.041: E/AndroidRuntime(546):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-30 19:43:06.041: E/AndroidRuntime(546):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-30 19:43:06.041: E/AndroidRuntime(546):     at dalvik.system.NativeStart.main(Native Method)


해당부분 오류 로그캣 입니다! ㅠㅠ

1개의 답변

0 추천
로그에 다 써있네요..

AlarmShowActivity 63째 줄이 어딘진 모르겠지만 xxx.xxx() 이런식으로 하는데 호출하는 객체가 null인 경우겠죠

해당 부분 예외처리 하고 왜 null인지 로직이 잘못되었는지 그럴 수도 있는 것인지 고민하세요
Gioskhan (12,060 포인트) 님이 2014년 7월 31일 답변
Gioskhan님이 2014년 7월 31일 수정
public void run() {
    String str_receiver = txtReceiver.getText().toString();    <<--- 63번째 줄
    String str_message = txtMessage.getText().toString();  
     

입니다.

그럼 run ()부분을 예외처리하면 될까요?
핸들러를 저런식으로 사용해도 되는지에 대해서도 궁금합니다!ㅠㅠ
txtReceiver가 null인지
txtReceiver.getText() 가 null인지는 확인해보는 수 밖에 없구요.
걔네가 null이 아닐 때에만 비로소 위 동작들을 해야합니다.
이런게 예외처리라는 거에요.
또 다른 질문은 다시 해주세요. 저 혼자 답변 달기에는 질문들이 너무 많아요
넵! 감사합니다! 확인해볼께요!!
...