0

我有问题,我无法解决。在我的活动中,我得到了一个函数,如果手机连接到 Wifi 或 3g 则返回。当我打开onCreate()时,我会初始化变量并在 5 秒内运行 TimerTask 5 次,以测试连接是否为“真”。

如果连接打开,我设置一个对用户可见的 Enter 按钮,单击以前进到我的下一个活动,并设置 2 个文本,以打开一条消息“CLICK 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);
    }
});
}

注意:在应用程序的开头,我假设没有 Internet 连接,这就是为什么我将 TextColor 更改为绿色并将打开更改为“单击 Enter ..”(在开头显示的文本是“没有 Internet ,开机。等待”...

4

1 回答 1

1

如错误所述,您不能在与创建视图的线程不同的线程中触摸视图,该线程通常是 UI 线程(应用程序的主线程)。您可以通过更改任务以在 UI 线程上运行 UI 更改来轻松修复它,如下所示:

runOnUIThread(new Runnable()
{
            turnOn.setText("Click Enter to begin");
            turnOn.setTextColor(R.color.Green);
});

另一种选择是为相同目的使用处理程序。但我个人更喜欢简单的runOnUIThread方法。

于 2013-04-13T13:10:09.460 回答