0

我正在尝试从 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 来处理更复杂的事情,但这是我想要完成的简化版本。

4

2 回答 2

1

您应该在doInBackground() 或 onProgressUpdate()方法中打印您的变量。由于 doInBackground() 方法不在 UI 线程上运行,因此打印语句很可能在变量递增之前执行。

像这样:(假设“myVariable”是整数类型,并且这个 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 循环只是一个示例,您可以在那里做任何事情,然后更新您的变量并发布它。另请注意,我将“进度”类型更改为整数:

AsyncTask<Void, Integer, Void> 
于 2013-08-18T10:09:58.353 回答
0

AsyncTask主要的三个方法是onPreExecute、doInBackground、onPostExecute

AsyncTaskonPreExecute方法 主要用于显示加载/处理对话框,以便在处理完成之前禁用用户与 UI的交互。

AsyncTaskdoInBackground方法 主要用于后台计算或调用Web 服务

AsyncTaskonPostExecute方法 主要用于显示doInBackground 方法的输出,可用于在 UI 上执行操作

@CynthiaDDurazo: 因此,在您的情况下,您应该使用 onPostExecute方法来放置您的代码System.out.println(myVariable);

于 2013-08-18T12:38:44.827 回答