Программирование потоков и обработчиков в Android? - PullRequest
0 голосов
/ 13 февраля 2011

я выполнил следующий код

public class Activity_Threads_Handler extends Activity {


private int mSec;

TextView tv;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    tv = (TextView) findViewById(R.id.TextView01);
    startHeavyDutyStuff();
}

void startHeavyDutyStuff() {

    // Here is the heavy-duty thread
    Thread t = new Thread() {

        public void run() {
            try {
                while (true) {

                    mSec = Calendar.getInstance().get(Calendar.MINUTE);
                    // Send update to the main thread
                    messageHandler.sendMessage(Message.obtain(
                            messageHandler, mSec));

                    Thread.sleep(1000);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    };
    t.start();
}

// Instantiating the Handler associated with the main thread.
private Handler messageHandler = new Handler() {

    @Override
    public void handleMessage(Message msg) {
        tv.setText(msg.what);
    }

};

}

приведенный выше код предназначен для отображения текущей секунды в TextView, постоянно обновляя его ...

и я получил следующую ошибку в моем logcat

ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное android.content.res.Resources $ NotFoundException: строковый идентификатор ресурса # x22 на android.content.res.Resources.getText (Resources.java:201) на android.widget.TextView.setText (TextView.java:2857) в com.kpj4s.Threads_Handler.Activity_Threads_Handler $ 1.handleMessage (Activity_Threads_Handler.java:56) на android.os.Handler.dispatchMessage (Handler.java:99) на android.os.Looper.loop (Looper.java:123) на android.app.ActivityThread.main (ActivityThread.java:3647) в java.lang.reflect.Method.invokeNative (родной метод) в java.lang.reflect.Method.invoke (Method.java:507) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:839) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:597) at dalvik.system.NativeStart.main (собственный метод)

Может кто-нибудь помочь мне, пожалуйста .. спасибо:)

Ответы [ 2 ]

2 голосов
/ 13 февраля 2011

Проблема:

tv.setText(msg.what);

Что вы пытаетесь сделать?

Проблема в том, что msg.what - это целое число, а setText получает: либо String, либо целое число, которое является ресурсом Android (например, R.string.something). Таким образом, если вы хотите показать содержимое msg.what, используйте tv.setText(String.valueOf(msg.what)).

1 голос
/ 13 февраля 2011

TextView.setText(int) ожидает, что целочисленный параметр будет идентификатором ресурса.Вам необходимо преобразовать его в String, т.е. вы хотите:

tv.setText(Integer.toString(msg.what)); 
...