Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 倒计时错误地将文本设置为超出要求的视图_Android - Fatal编程技术网

Android 倒计时错误地将文本设置为超出要求的视图

Android 倒计时错误地将文本设置为超出要求的视图,android,Android,在CountDownTimeronFinish方法中,我想将2个字符串设置为2个不同的视图,如下所示 public void onFinish() { setText(timer, getString(R.string.times_up)); setText(speedTextView, speedValue); setColorTimer(timer, Color.RED); runOnUiTh

CountDownTimer
onFinish
方法中,我想将2个字符串设置为2个不同的视图,如下所示

public void onFinish() {
            setText(timer, getString(R.string.times_up));
            setText(speedTextView, speedValue);

            setColorTimer(timer, Color.RED);

            runOnUiThread(new Runnable() {
                public void run() {
                    final Handler handler = new Handler();
                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
                            startActivity(intent);
                        }
                    }, 3000);
                }
            });
        }
private void setText(final TextView text, String value) {
    speedValueToSetText = value;
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            text.setText(speedValueToSetText);
        }
    });
}
但是,当计时器完成时,
R.string.times\u up
值将同时转换为
timer
speedTextView
视图。我更改了这两行的顺序,在这种情况下,
speedValue
在两个视图上都被强制转换,尽管它们应该是两个不同的方法调用

setText
方法是一个经过修改的方法,可以在主线程而不是像这样在后台线程上运行它们

public void onFinish() {
            setText(timer, getString(R.string.times_up));
            setText(speedTextView, speedValue);

            setColorTimer(timer, Color.RED);

            runOnUiThread(new Runnable() {
                public void run() {
                    final Handler handler = new Handler();
                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
                            startActivity(intent);
                        }
                    }, 3000);
                }
            });
        }
private void setText(final TextView text, String value) {
    speedValueToSetText = value;
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            text.setText(speedValueToSetText);
        }
    });
}

我如何解决这个问题?setText方法不应该相互独立吗?

全局变量
speedValueToSetText
导致错误。删除此行
speedValueToSetText=value
setText
应该是

private void setText(final TextView text, String value) {

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        text.setText(value);
    }
});
}


计时器在哪里?那么它将要求字符串是最终的,我希望它更新,所以我应该避免它。如果您需要
speedValueToSetText
,您可以如下编辑代码,private void setText(final TextView text,String value){speedValueToSetText=value;final String resultValue=value;runOnUiThread(new Runnable(){@Override public void run(){text.setText(resultValue);}}}}}}我已经更新了我的答案。它起作用了,谢谢,但我能问一下它为什么会这样做吗?
speedValueToSetText=value;
text.setText(speedValueToSetText);
处于不同的线程中。在某些情况下,A可能工作了5分钟,但B没有启动。