gpt4 book ai didi

java - 引入ExecutorService后TextView setText不起作用

转载 作者:行者123 更新时间:2023-12-01 17:00:43 24 4
gpt4 key购买 nike

当我想使用ExecutorService时,我遇到了这个问题。我只是创建一个 Button 和一个 TextView。我想要实现的行为是,当按下按钮时,TextView 更改为文本“Napping...”。另一个线程启动,它将 hibernate 一段随机时间(毫秒)。 sleep 后,将返回一个字符串,并将 TextView 设置为该字符串。

这是将用于 SingleThreadExecutor 的 Callable 类。

package com.example.simpleasynctask;

import java.util.Random;
import java.util.concurrent.Callable;

public class MyWorkThread implements Callable<String> {
@Override
public String call() throws Exception {
Random r = new Random();
int n = r.nextInt(11);
int s = n*200;
try {
Thread.sleep(s);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Awake at last after sleeping for " + s + " milliseconds!";
}
}

这是按下按钮时将调用的函数

 public void startTask(View view) throws Exception{
mTextView.setText(R.string.napping); // it does not work
ExecutorService executorService = Executors.newSingleThreadExecutor();
Future future = executorService.submit(mCallable);
executorService.shutdown();
mTextView.setText((String) future.get()); // it works

}

奇怪的行为是这个函数的第一行不起作用。它只是跳过该行并等待从另一个线程返回的结果。请参阅下面的两张图片。 enter image description here

enter image description here

但是,如果我简单地从 startTask 中删除除第一行之外的所有内容,则可以设置“Napping...”文本。谁能帮我?非常感谢。

最佳答案

Android Handler更好的是适合这样的目的,使用它如下:

public void startTask(View view) {
long sleeptime = 10 * 1000;//10 seconds
mTextView.setText("Napping...");
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
mTextView.setText("Awake at last after sleeping for " + sleeptime + " milliseconds!");
}
}, sleeptime);
}

或者你可以这样做:

public void startTask1(View view) {
long sleeptime = 10 * 1000;//10 seconds
mTextView.setText("Napping");
view.postDelayed(new Runnable() {
@Override
public void run() {
mTextView.setText("Awake at last after sleeping for " + sleeptime + " milliseconds!");
}
}, sleeptime);
}

关于java - 引入ExecutorService后TextView setText不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61508061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com