使用Switch对象会破坏Android代码

时间:2017-11-05 17:21:50

标签: android

我有SwitchTimer个对象,每1秒检查一次这个切换。

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);
}

如果所有这些条件都成立,我想关闭开关但应用程序崩溃。

我做错了什么?

感谢。

1 个答案:

答案 0 :(得分: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);

}