마스터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()
감사합니다! 핸들러로 토스트 메세지를 덧씌워서 해결했습니다!

답변 달기

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