如何在AsyncTask期间更新Activity的变量?

时间:2013-08-18 10:03:12

标签: android android-asynctask

我试图从AsyncTask更新变量,但我不确定如何。这就是我试过的:

AsyncTask之外是具有变量的活动类..:

int myVariable = 0;
MyTask hi = new MyTask ();
hi.execute();
System.out.print(myVariable);
class MyTask extends AsyncTask<Void, Void, Void> {

        protected Void doInBackground(Void... args0) {
                    myVariable = 3;
            return null;

        }
    }

仍打印0 :(

当我打印出变量时,它仍然显示0,而不是3.我使用AsynTask来处理更复杂的事情,但这是我想要完成的事情的愚蠢版本。 / p>

2 个答案:

答案 0 :(得分:1)

您应该在 doInBackground()或onProgressUpdate()方法中打印变量。由于doInBackground()方法不能在UI-Thread上运行,因此很可能在变量递增之前执行print-statement。

像这样:(假设“myVariable”的类型为Integer,而此AsyncTask是您Activity的内部类)

class MyTask extends AsyncTask<Void, Integer, Void> {

    protected Void doInBackground(Void... args0) {

          for(int i = 0; i < 100; i++) {

              myVariable++;
              // like this:
              Log.i("Variable", "" + myVariable);
              // or like this:
              publishProgress(myVariable);
          }

          return null;
    }

    protected Void onProgressUpdate(Integer... prog) {
          Log.i("Variable", "" + prog[0]);
    }
}

请注意我正在使用的for循环只是一个示例,您可以在那里做任何事情,然后更新您的变量并发布它。另请注意,我将“Progress”类型更改为Integer:

AsyncTask<Void, Integer, Void> 

答案 1 :(得分:0)

AsyncTask 主要有三种方法是 onPreExecute,doInBackground,onPostExecute

AsyncTask 的方法 onPreExecute 主要用于显示加载/处理对话框,以便在此过程完成之前与用户界面的用户互动已停用

AsyncTask 的方法 doInBackground 主要用于执行后台计算或调用 Web服务 的。

AsyncTask 的方法 onPostExecute 主要用于显示doInBackground 方法的输出,它可以用于< strong>在用户界面上执行操作

@CynthiaDDurazo: 因此,在您的情况下,您应 使用onPostExecute 方法将您的代码 的System.out.println(MYVARIABLE);