我遇到了问题我无法解决。在我的活动中,我得到了一个功能,如果手机连接到Wifi或3g,则返回。当我打开 onCreate()时,我进行变量初始化,并在5秒内运行TimerTask 5,以测试连接是否为“true”。
如果连接处于开启状态,我将用户点击的Enter按钮设置为进入下一个活动,然后设置2个文本,打开“点击enter to begin”消息。
问题在于TimerTask,我得到一个错误说:“只有创建视图层次结构的原始线程才能触及其视图”。 我该如何解决?
代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.entry_activity);
enter = (Button) findViewById(R.id.button_enter);
intent = new Intent(EntryActivity.this, MainActivity.class);
warning = (TextView) findViewById(R.id.textView_warning);
turnOn = (TextView) findViewById(R.id.textView_turnOn);
Context context=this;
t = new Timer();
t.schedule( new TimerTask() {
@Override
public void run() {
if(isNetAvailable(getApplicationContext())){
enter.setVisibility(View.VISIBLE);
turnOn.setText("Click Enter to begin");
turnOn.setTextColor(R.color.Green);
t.cancel();
}
}
},0, 1000);
enter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub~
startActivity(intent);
}
});
}
注意:在应用程序的开始时,我假设没有互联网连接,这就是为什么我将TextColor更改为绿色并将turnOn更改为“Click Enter ..”(在显示的文本的开头是“没有互联网,请打开它。等待”......
答案 0 :(得分:1)
正如错误所述,您无法在与创建视图的线程不同的线程中触摸视图,这通常是UI线程(应用程序的主线程)。 您可以通过更改任务来轻松修复它,以便在UI线程上运行UI更改,如下所示:
runOnUIThread(new Runnable()
{
turnOn.setText("Click Enter to begin");
turnOn.setTextColor(R.color.Green);
});
另一个选择是使用处理程序来实现相同的目的。但我个人更喜欢简单的runOnUIThread
方法。