2015-01-30 2 views
-3

이 코드가 있고 시작시 내 앱이 충돌합니다. 이 코드는 onCreate 메서드에서 가져온 것입니다.Android Studio 1.0.2에서 타이머를 만드는 방법은 무엇입니까?

Timer timer = new Timer(); 
    timer.schedule(new TimerTask() { 

     @Override 
     public void run() { 
      TextView txtClicks = (TextView) findViewById(R.id.txtClicks); 
      // task to be done every 1000 milliseconds 
      iClicks = iClicks + 1; 
      txtClicks.setText(String.valueOf(iClicks)); 
     } 
    }, 0, 1000); 
+0

충돌 어디서 무엇입니까? 나는 당신의 가치 iClicks가'iClicks = iClicks + 1; "전에 설정되지 않았거나'txtClicks.setText (String.valueOf (iClicks));에서 NPE를 얻었 기 때문에 내기를 할 것입니다 ' – zgc7009

+0

@ zgc7009 I 몰라. 나는 int iClicks = 0을 클래스로 선언했지만 int iClicks = 0을 TimerTask 클래스에 추가했을 때 -> 응용 프로그램이 충돌했지만 변경된 텍스트가 0에서 1로 변경되었습니다. – Saibamen

답변

3

너는 다른 thread 안에 있습니다. UIThread에서 UI를 수정할 수 있습니다. 당신은 사용해야

여기
Timer timer = new Timer(); 
timer.schedule(new TimerTask() {  
    @Override 
    public void run() { 
     runOnUiThread(new Runnable(){ 
     @Override 
     public void run(){ 
     TextView txtClicks = (TextView) findViewById(R.id.txtClicks); 
     // task to be done every 1000 milliseconds 
     iClicks = iClicks + 1; 
     txtClicks.setText(String.valueOf(iClicks)); 
     } 
    }); 

    } 
}, 0, 1000); 
+0

고마워요. 그것은 지금 작품 :) – Saibamen

0

이 timerLoopScan 및 scanPeriod되는 글로벌 변수, 코드 조각입니다 :

timerLoopScan = new Timer(); 
    TimerTask timerTask = new TimerTask() { 
     @Override 
     public void run() { 
        loopScan(); // your processings here 
      }); 
     } 
    }; 
    timerLoopScan.scheduleAtFixedRate(timerTask, 0, scanPeriod); 
관련 문제