Что не так с моим Thread () - кодом? - PullRequest
0 голосов
/ 04 марта 2011

У меня вопрос по поводу приложения для Android. Позже я хочу создать игру, и сейчас я пробую классы и функции, которые мне нужно понять. Сейчас я пытаюсь понять, как правильно использовать потоки, но мое приложение «принудительно закрывает», когда я касаюсь кнопки.

Для этого тестового приложения у всех на экране есть один TextView и одна кнопка. Кнопка вызывает threadStart () при нажатии. (onClick в xml) И что я хочу сделать, это создать поток, который увеличивает переменную значение на 1, а затем сообщить в поток пользовательского интерфейса, который затем обновит текстовое представление с новым значением.

Может кто-нибудь увидеть, что я делаю не так с этим маленьким кусочком кода?


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: общие задачи и способы их выполнения в разделе «Обработка дорогостоящих операций в потоке пользовательского интерфейса».

Я благодарен за любую помощь.

Ответы [ 2 ]

1 голос
/ 04 марта 2011

setText не работает правильно, когда вы передаете целое число напрямую. Попробуйте преобразовать его в строку раньше:

txtCounter1.setText (String.valueOf (значение));

Кроме того, проверьте этот ответ об использовании потоков, которые должны обновлять пользовательский интерфейс.

0 голосов
/ 04 марта 2011

, если threadStart - ваш onClick, подпись должна быть

public void threadStart(View v)
...