0

Мне нужен поток, который ждет некоторое время, а затем меняет текст в TextView. Мой поиск how to use runOnUiThreadОшибка при использовании setText в runInUiThread

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

Вот мой код (старт функция OnClick кнопки):

public class MainActivity extends AppCompatActivity { 

    public int i = 0; 
    private TextView mText; 
    private Thread thread; 

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

     mText = (TextView)findViewById(R.id.text); 
    } 

    public void start (View v) { 
     runThread(); 


    } 

    private void runThread() { 

     new Thread() { 
      public void run() { 
       while (true) { 
        try { 
         runOnUiThread(new Runnable() { 

          @Override 
          public void run() { 
           i++; 
           mText.setText((i)); 
          } 
         }); 
         Thread.sleep(100); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     }.start(); 
    } 

} 

Вот моя ошибка

09-26 20:26:34.054 22254-22254/com.horizon.testtimerthread E/AndroidRuntime: FATAL EXCEPTION: main 
                      android.content.res.Resources$NotFoundException: String resource ID #0x1 
                       at android.content.res.Resources.getText(Resources.java:1058) 
                       at android.support.v7.widget.ResourcesWrapper.getText(ResourcesWrapper.java:52) 
                       at android.widget.TextView.setText(TextView.java:3866) 
                       at com.horizon.testtimerthread.MainActivity$1$1.run(MainActivity.java:39) 
                       at android.os.Handler.handleCallback(Handler.java:615) 
                       at android.os.Handler.dispatchMessage(Handler.java:92) 
                       at android.os.Looper.loop(Looper.java:177) 
                       at android.app.ActivityThread.main(ActivityThread.java:4947) 
                       at java.lang.reflect.Method.invokeNative(Native Method) 
                       at java.lang.reflect.Method.invoke(Method.java:511) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
                       at dalvik.system.NativeStart.main(Native Method) 

Заранее спасибо за вашу помощь.

ответ

2

mText.setText((i)) есть проблема.

Android считает, что вы ссылаетесь на строковый идентификатор и сбой, поскольку он не может найти строку с идентификатором 1. Если вы хотите установить текст в «1», «2» и т. Д. ... затем напишите mText.setText((Integer.toString(i)))

+0

Я чувствую себя таким немым прямо сейчас. Да, он работает, спасибо. –

+0

Не беспокойтесь;) Вы будете использовать это в будущем в качестве примера того, насколько вы выросли – Shmuel

1

С i имеет тип int, вы вызываете setText(int resourceId) вариант функции, что очевидно, вы не хотите. setText(String.valueOf(i)) должен работать.

Смежные вопросы