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

인텐트 활용하여 다른 액티비티로 크로노미터 값 넘기기

0 추천

크로노미터를 사용하여 A액티비티가 실행되었을때 1초부터 카운트가 되는 코드를 작성중입니다.

현재 다른 액티비티로 넘어가도 기존 액티비티에서 크로노미터가 정지되고 A액티비티로 다시 넘어가도 멈췄던 시간부터 진행하는 코드까지 작성하였습니다.

그런데 만약 A액티비티에서 B액티비티로 넘어갈때 intent를 활용해서 A액티비티에서의 마지막 시간을 B액티비티의 텍스트뷰에서 출력하고자 하는데 자꾸 에러가나서 해결방안이 있을까 해서 질문드립니다.

 

우선 A액티비티의 크로노미터 부분입니다.

@Override
    protected void onStart() {
        super.onStart();

        timer = (Chronometer)findViewById(R.id.timer);
        timer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener(){
            @Override
            public void onChronometerTick(Chronometer cArg) {
                long time = SystemClock.elapsedRealtime() - cArg.getBase();
                int h   = (int)(time /3600000);
                int m = (int)(time - h*3600000)/60000;
                int s= (int)(time - h*3600000- m*60000)/1000 ;
                String hh = h < 10 ? "0"+h: h+"";
                String mm = m < 10 ? "0"+m: m+"";
                String ss = s < 10 ? "0"+s: s+"";
                cArg.setText(hh+" : "+mm+" : "+ss);

                Intent intent1 = new Intent(Speedmeter.this, MapsActivity.class);
                intent1.putExtra("current_cnt", time);
            }
        });
        timer.setBase(SystemClock.elapsedRealtime() - pauseOffset);
        timer.start();

추가적으로 onCreate안에 

pauseOffset = SystemClock.elapsedRealtime() - timer.getBase();

코드를 작성하여 액티비티가 전환되었다가 다시 돌아와도 전환된 시간부터 시작하게 만들었습니다.

 

 

 

B액티비티 입니다.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    mCurrentTimer = findViewById(R.id.current_timer);
    intent1 = getIntent();
    current_cnt = intent1.getStringExtra("current_cnt");
    int current_cnt1 = Integer.valueOf(current_cnt);
    int h   = (int)(current_cnt1 /3600000);
    int m = (int)(current_cnt1 - h*3600000)/60000;
    int s= (int)(current_cnt1 - h*3600000- m*60000)/1000 ;
    String hh = h < 10 ? "0"+h: h+"";
    String mm = m < 10 ? "0"+m: m+"";
    String ss = s < 10 ? "0"+s: s+"";
    mCurrentTimer.setText(hh+" : "+mm+" : "+ss);
}

A액티비티에서 intent로 정보를 받아온뒤 B액티비티에 스트링형식으로 뿌려주고  그것을 int형으로 전환했는데 실제 빌드를 해보면 앱이 정상되로 실행되지 않고 다시 시작하라는 메세지를 출력하며 종료되는 에러가 발생합니다.

 

이것저것 계속 해보았지만 뭐가 잘못된지 몰라 질문드립니다.

한그루123 (120 포인트) 님이 2018년 9월 14일 질문

1개의 답변

0 추천
intent1만 만들고 보내지 않았네요.
자신이 정말 참고한 샘플과 똑같이 Writing 했다고 저는 절대 생각하지 않습니다.
끊임없이 나 자신을 의심하고, 뭐가 틀렸는지 확인합니다.

샘플을 참고하세요.

https://startandroid.ru/en/lessons/241-lesson-28-extras-passing-data-using-intent.html
Will Kim (43,170 포인트) 님이 2018년 9월 14일 답변
조금 편집하여 코드를 올리다보니 startActivity(intent1); 가 생략되었네요.. ㅠㅠ
startActivity(intent1);를 붙여도 같은 에러가 발생해서요ㅠㅠ
...