0

Androidアプリケーションについて質問があります。後でゲームを作りたいのですが、現在、理解する必要のあるクラスや機能を試しています。現時点では、スレッドを適切に使用する方法を把握しようとしていますが、ボタンに触れると、アプリケーションは「強制終了」になります。

このテストアプリケーションの場合、画面に表示されるのは1つのTextViewと1つのボタンだけです。ボタンを押すと、threadStart()が呼び出されます。(xmlのonClick)そして、私がやりたいのは、変数値を1増やすスレッドを作成し、UIスレッドに報告して、新しい値でテキストビューを更新することです。

誰かが私がこの小さなコードで何を間違っているのかを見ることができますか?


package com.weldeborn.tc;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;

public class ThreadCounter extends Activity {

    TextView txtCounter1;

    int value=0;
    final Handler mHandler = new Handler();
    final Runnable mUpdateResults = new Runnable() {
        public void run() {
            updateResult();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        txtCounter1 = (TextView) findViewById(R.id.counter1);

    }

    protected void threadStart() {
        Thread t = new Thread() {
            public void run() {
                doSomething();
                mHandler.post(mUpdateResults);
            }
        };
        t.start();
    }

    private void doSomething() {
        value = value+1;
    }

    private void updateResult() {
        txtCounter1.setText(value);
    }
}

私のコードは、Android Developerの例に基づいています:「一般的なタスクとその方法」セクションの「UIスレッドでの高価な操作の処理」の見出しの下。

私はどんな助けにも感謝しています。

4

2 に答える 2

1

整数を直接渡すと、setText が正しく機能しません。前に文字列に変換してみてください:

txtCounter1.setText(String.valueOf(値));

また、UI を更新する必要があるスレッドの使用については、この回答を確認してください。

于 2011-03-04T13:32:53.907 に答える
0

あなたthreadStartのonClickが署名である必要がある場合

public void threadStart(View v)
于 2011-03-04T13:33:14.667 に答える