0

Ich brauche einen Thread, der einige Zeit wartet, dann ändert einen Text in einem TextView. Meine Suche gefunden how to use runOnUiThreadFehler beim Verwenden von setText in runInUiThread

ich die erste Antwort verstanden und versucht, es in meinem Code zu verwenden, aber ich erhalte eine Fehlermeldung, wenn setText im Thread aufrufen.

Hier ist mein Code (Beginn ist die onClick Funktion einer Taste):

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(); 
    } 

} 

Hier ist mein Fehler

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) 

Sie für Ihre Hilfe Vielen Dank im Voraus.

Antwort

2

mText.setText((i)) ist das Problem.

Android denkt, dass Sie auf eine String-ID verweisen und abstürzt, da es keine Zeichenfolge mit der ID 1 finden kann. Wenn Sie den Text auf "1", "2" usw. setzen möchten, schreiben Sie mText.setText((Integer.toString(i)))

+0

Ich fühle mich jetzt so dumm. Ja, es funktioniert, danke. –

+0

Keine Sorge;) Sie werden dies in der Zukunft als ein Beispiel dafür verwenden, wie viel Sie gewachsen sind – Shmuel

1

Seit i hat Typ int, rufen Sie setText(int resourceId) Variante der Funktion, was offensichtlich ist, dass Sie nicht wollen. setText(String.valueOf(i)) sollte funktionieren.

Verwandte Themen