AsyncTask新手问题

时间:2014-06-22 20:21:18

标签: java android class android-asynctask

我无法弄清楚为什么变量“vysledek”在从活动调用void“Send”后保持不变。我可能并不完全理解AsyncTask的工作方式。谢谢你的帮助。

public class Tools{

   public String vysledek;

 public void Send() {
       Poslat Poslat = new Poslat();
       Poslat.execute();
}

private class Poslat extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {

            vysledek = "something I want it to be";
     }

@Override
protected void onPostExecute(String result){
    vysledek = "something I want it to be 2";
}

}

我希望调用“发送”的Activity已经拥有该变量。所以我想它必须等待它完成。我试着像这样等待:

 while (Tools.vysledek.equals(""))
            { }

但这会导致崩溃。

2 个答案:

答案 0 :(得分:1)

时序。 asnc任务发生在另一个线程上。但是当操作系统切换到该线程时,操作系统就可以了。它应该很快发生(接下来的几百毫秒),但它不一定是立即的,所以如果你立即检查它,你可能会或可能不会看到它改变。放置需要运行异步任务的代码的正确位置是onPostExecute。

答案 1 :(得分:1)

你应该在asynctask完成之后分配它

public class Tools{

   public String vysledek;

 public void Send() {
       Poslat Poslat = new Poslat();
       Poslat.execute(vysledek);
}

private class Poslat extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {


     }

     @Override
     protected void onPostExecute(String result){
     vysledek = "I should be here";
     }
}