Я пытаюсь сделать простой поток, который меняет текстовое представление через некоторое время - PullRequest
0 голосов
/ 12 августа 2011

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

Ответы [ 3 ]

4 голосов
/ 12 августа 2011

Проблема, которую я вижу, состоит в том, что потоки предназначены для запуска один раз.Вам нужно создавать новый экземпляр потока каждый раз, когда вы хотите его запустить.

0 голосов
/ 12 августа 2011

Я не знаю, какое исключение выдается.Я думаю, что это NPE брошено.При попытке установить текст на TextView.Попробуйте создать экземпляр TextView в методе handleMessage():

Handler cambiarHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {             
           texto = (TextView) findViewById(R.id.texto);
           texto.setText("ok");  

        }
    };

И в методе onClick сделайте это, чтобы каждый раз при нажатии кнопки создавался новый экземпляр потока.

public void onClick(View v){
new Thread (new Runnable() {
        public void run() {

                    try {

                                         Thread.sleep(3000);
                        cambiarHandler.sendEmptyMessage(0);

                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
            }  

     }).start();
}
0 голосов
/ 12 августа 2011

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

Вместо этого следует использовать ASyncTask, если вы хотите изменить пользовательский интерфейс из отдельного потока.*

См. Здесь:

Обновление пользовательского интерфейса из потока

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...