我在UI中更改图像时遇到问题,具体取决于我的线程中布尔变量的返回值。
我的班级被定义为:
class recorderThread extends AsyncTask<String, Void, Boolean> {
我传入一个字符串,我想要一个布尔值。 如果我不能传递布尔值然后我可以做到这一点...但我尝试并且无法从线程更改图像如下
@Override
protected void onPostExecute(Boolean result) {
if (result)
ball = new Ball(getContext(),R.drawable.correctball);
else
ball = new Ball(getContext(),R.drawable.wrongball);
}
我是否有办法在UI中调用线程来获取布尔值?
new recorderThread().execute("A");
谢谢大家,希望它有道理。
答案 0 :(得分:1)
没有理由不能从AsyncTask的doInBackground方法返回一个布尔值。只需确保定义返回一个布尔值,并根据需要进行适当设置:
private class recorderThread extends AsyncTask<String, Void, Boolean> {
protected boolean doInBackground(String... strings) {
boolean result;
// Do your background process and make sure
// that you set the boolean correctly
return result;
}
protected void onPostExecute(boolean result) {
// Your current UI stuff here.
}
}
此外,还要进行大量的日志记录。确保正确设置布尔值。另外,使用调试器逐步执行它。假设您在Ball()方法中正确更新UI,应该是一个简单的解决方案。注意:也要检查以确保其正常工作。
答案 1 :(得分:-1)
只允许UI线程修改UI(并且您的异步任务在单独的线程上运行),因此所有UI修改都应该通过您的活动的runOnUIThread()开心:
activeHighscoreEntry.setTurns(activeHighscoreEntry.getTurns() + 1);
runOnUiThread(new Runnable() {
public void run() {
if (!handleRemoval(point1)) {
placeNext();
}
}
});