我无法弄清楚为什么变量“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(""))
{ }
但这会导致崩溃。
答案 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";
}
}