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

timerTask 종료후 앱 튕김

0 추천

안녕하세요 Seekbar를 이용해 시간을 받아서 그 시간 -1초씩 하는 타이머 앱을 만들고 있습니다. 어찌어찌 구성은 다 갖췄으나 타이머 시간이 0초가 되면 토스트 메세지를 출력하도록 해 놓았는데 나오라는 메세지는 나오지 않고 앱이 종료됩니다. 코드 첨부하겠습니다 도움 부탁드립니다 ㅠㅠ

final Button stop = (Button) findViewById(R.id.button3);
       Button start = (Button) findViewById(R.id.button2);
       start.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               Toast.makeText(timer.this,"타이머 시작",Toast.LENGTH_SHORT).show();
               minute = timeTick/60;
               second = timeTick%60;
               final TimerTask tt = new TimerTask() {
                   @Override
                   public void run() {
                       runOnUiThread(new Runnable() {
                           @Override
                           public void run() {
                               time.setText(Integer.toString(minute) + ":" + second);
                           }
                       });
                       if(second==0&&minute==0){
                           Toast.makeText(timer.this,"타이머 종료",Toast.LENGTH_SHORT).show();
                           cancel();
                       }
                       if (second==0){
                           minute--;
                           second=60;
                       }
                       second--;
 
                   }
               };
               Timer timer = new Timer();
               timer.schedule(tt,1000,1000);
               stop.setOnClickListener(new View.OnClickListener() {
                   @Override
                   public void onClick(View view) {
                       Toast.makeText(timer.this,"타이머 정지",Toast.LENGTH_SHORT).show();
                       tt.cancel();
                   }
               });
 
           }
       });
탐탐비 (190 포인트) 님이 2020년 11월 23일 질문
어떤 에러가 나오는지 에러 로그를 알려주세요

로그캣 첨부하겠습니다! 모쪼록 답변 해 주시면 감사하겠습니다 (__)

2020-11-24 19:47:48.637 16614-16652/com.example.ciy E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008cdf
2020-11-24 19:47:48.640 16614-16652/com.example.ciy E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008824
2020-11-24 19:48:03.017 16614-16661/com.example.ciy E/AndroidRuntime: FATAL EXCEPTION: Timer-0
    Process: com.example.ciy, PID: 16614
    java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
        at android.os.Handler.<init>(Handler.java:200)
        at android.os.Handler.<init>(Handler.java:114)
        at android.widget.Toast$TN$2.<init>(Toast.java:336)
        at android.widget.Toast$TN.<init>(Toast.java:336)
        at android.widget.Toast.<init>(Toast.java:103)
        at android.widget.Toast.makeText(Toast.java:256)
        at com.example.ciy.timer$2$1.run(timer.java:70)
        at java.util.TimerThread.mainLoop(Timer.java:555)
        at java.util.TimerThread.run(Timer.java:505)

 

메인쓰레드에서 돌려서 나오는 에러네요
핸들러 하나 만들어서 처리해주세요 에러 그대로 구글링해보세여

 Can't create handler inside thread that has not called Looper.prepare()
감사합니다! 핸들러로 토스트 메세지를 덧씌워서 해결했습니다!

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...