从AsyncTask返回

时间:2011-10-09 14:20:42

标签: java android multithreading android-asynctask

我在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");

谢谢大家,希望它有道理。

2 个答案:

答案 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();
            }
        }
    });