【问题标题】:Error using setText in runInUiThread [duplicate]在 runInUiThread 中使用 setText 时出错 [重复]
【发布时间】:2016-09-26 18:31:19
【问题描述】:

我需要一个等待一段时间然后更改 TextView 中的文本的线程。 我的搜索找到了how to use runOnUiThread

我理解第一个答案并尝试在我的代码中使用它,但在线程中调用 setText 时出现错误。

这是我的代码 (start是按钮的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)

提前感谢您的帮助。

【问题讨论】:

    标签: java android android-studio ui-thread android-runonuithread


    【解决方案1】:

    mText.setText((i)) 是问题所在。

    Android 认为您正在引用一个字符串 ID 并且正在崩溃,因为它找不到 ID 为 1 的字符串。如果您打算将文本设置为“1”、“2”等...然后写@987654322 @

    【讨论】:

    • 我现在感觉好傻。是的,谢谢。
    • 不用担心 ;) 你以后会用这个作为你成长的例子
    【解决方案2】:

    由于 i 的类型为 int,因此您正在调用函数的 setText(int resourceId) 变体,这显然不是您想要的。 setText(String.valueOf(i)) 应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-05
      • 2020-02-06
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 2020-10-17
      • 2018-03-27
      • 2018-05-13
      相关资源
      最近更新 更多