2016-11-13 21 views
0

私はタイムドループの横にtextViewのアップデートを作成しようとしています。私はそれがループするたびにinvalidate()しようとしました。これはうまくいくようですが、タイマーの起動時にアプリがクラッシュします。ここでAndroid invalidate()はtextViewを更新していません

はループです:ここでは

private Timer timer; 
private TimerTask timerTask = new TimerTask() { 
    @Override 
    public void run() { 
     thangO += 10; 
     textypoo.setText(Integer.toString(thangO)); 
     textypoo.invalidate(); 
    } 
}; 

public void start() { 
    if (timer != null) { 
     return; 
    } 
    timer = new Timer(); 
    timer.scheduleAtFixedRate(timerTask, 0, 2000); 
} 

は、私はいくつかのものを初期化するのonCreateである:ここでは

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_second); 
    Intent intent = getIntent(); 
    textypoo = (TextView)findViewById(R.id.textmcview); 

} 

は2のonClickメソッドです。

public void sendthestuff(View view) { 
    setContentView(R.layout.activity_second); 
    textypoo = (TextView) findViewById(R.id.textmcview); 
    thangO++; 
    message = Integer.toString(thangO); 
    textypoo.setText(message); 


} 

public void bazinga(View view) { 
    start(); 
} 
+0

は、UIスレッドで実行 – Saveen

+0

てみてください私がする?申し訳ありませんが、私はJavaのAndroid側が初めてです。 – moxide

+0

心配しないで、ここにコードを入れて分かります。http://stackoverflow.com/questions/12850143/android-basics-running-code-in-the-ui-threadをタイマーに入れてください。助けてくれてありがとう(: – moxide

答えて

0

置き換えます:

private TimerTask timerTask = new TimerTask() { 
    @Override 
    public void run() { 
     thangO += 10; 
     textypoo.setText(Integer.toString(thangO)); 
     textypoo.invalidate(); 
    } 
}; 

た:私はそれを押すたびのTextViewを更新し、タイマーを呼び出すこと、他の一つはどのように

private TimerTask timerTask = new TimerTask() { 
    @Override 
    public void run() { 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       thangO += 10; 
       textypoo.setText(Integer.toString(thangO)); 
       textypoo.invalidate(); 
      } 
     }); 
    } 
}; 
関連する問題