0

問題があり、解決できません。私の活動では、電話が Wifi または 3g に接続されている場合に戻る関数を取得しました。onCreate()を開くと、変数の初期化を行い、TimerTask を 5 秒で 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);
    }
});
}

注: アプリの開始時には、インターネット接続がないと想定しているため、TextColor を緑に変更し、turnOn を「Enter をクリックしてください..」に変更しています (最初に表示されるテキストは「インターネットがありません」です)。 、電源を入れてください。待っています」...

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 に答える