2017-11-05 4 views
-1

私は1秒ごとにそのスイッチをチェックするスイッチとタイマーを持っています。Switch.setChecked()はコードをクラッシュさせます

protected void onCreate(Bundle savedInstanceState) { 

    switchOnOff = (Switch) findViewById(R.id.switchOnOff); 

    // more code... 


    m_timer = new Timer(); 
    m_timer.scheduleAtFixedRate(new TimerTask() { 
    @Override 
     public void run() {    
     if(switchOnOff != null && switchOnOff.isChecked() && m_TcpClient != null) { 
      if (!m_TcpClient.IsSocketUp()) { 
       switchOnOff.setChecked(false); <---- the code crashes here    
        } 
       } 
      } 
     }, 0, 1000); 
} 

これらの条件がすべて当てはまる場合は、スイッチをオフにしたいが、アプリケーションがクラッシュする。

私は間違っていますか?

ありがとうございました。

+2

アプリのクラッシュを言うたび、常にクラッシュログを投稿することを忘れないでください –

答えて

0

あなたはワーカースレッドからViewを操作しようとしているようですが、それはAndroidでは禁止されています。 新しいRunnableをでラップすべきであり、例えば、UIスレッド上で、それを実行します。

@Override 
    public void run() {    
    if(switchOnOff != null && switchOnOff.isChecked() && m_TcpClient != null) { 
     if (!m_TcpClient.IsSocketUp()) { 
      runOnUiThread(new Runnable(){ 
      public void run() { 
       switchOnOff.setChecked(false); 
      } 
     } 

       } 
      } 
     } 
    }, 0, 1000); 

}

関連する問題