0

잠시 기다렸다가 TextView에서 텍스트를 변경하는 스레드가 필요합니다. 내 검색 결과 찾았습니다 how to use runOnUiThreadrunInUiThread에서 setText를 사용할 때 오류가 발생했습니다.

첫 번째 대답을 이해하고 내 코드에서 사용하려고했지만 스레드에서 setText를 호출 할 때 오류가 발생합니다.

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) 

당신의 도움에 미리 감사드립니다 내 오류입니다 :

여기에 내 코드 (시작 버튼의 OnClick 함수)입니다.

답변

2

mText.setText((i))이 문제입니다.

Android는 ID가 1 인 문자열을 찾을 수 없기 때문에 String ID를 참조하며 충돌하고 있다고 생각합니다. 텍스트를 "1", "2"등으로 설정하려는 경우 mText.setText((Integer.toString(i)))

+0

지금은 너무 바보 같아요. 예, 감사합니다. –

+0

걱정할 필요 없다;) 당신이 성장한 정도의 예로서 앞으로 이것을 사용할 것이다. – Shmuel

1

i은 int 유형이므로 setText(int resourceId) 변형 함수를 호출합니다. 원하는 것은 분명하지 않습니다. setText(String.valueOf(i))이 작동해야합니다.