所以我是新手,我需要调用将从单独文件运行 AsyncTask 的函数。
MainActivity.java代码
public class MainActivity extends AppCompatActivity {
String res;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Asynctasktest newAsy = new Asynctasktest();
res = newAsy.ValidateUser();
Toast.makeText(getBaseContext(), "'"+res+"'", Toast.LENGTH_LONG).show();
}
}
和AsyncTaskTest.java代码
public class Asynctasktest extends MainActivity {
String Res;
private class GetFWork extends AsyncTask<Void,Void,String> {
@Override
protected void onPreExecute() {
Res = "onPreExecute";
}
@Override
protected String doInBackground(Void... param) {
return "am i here";
}
@Override
protected void onPostExecute(String Result) {
super.onPostExecute(Result);
Res = Result;
}
}
public String ValidateUser(){
final GetFWork Fl = new GetFWork();
Fl.execute();
return Res;
}
}
所以我需要获取文本“我在这里”,但我得到“onPreExecute”,这表明在第一次调用时它没有执行 doInBackground。
最佳答案
这就是 AsyncTask 的工作原理。
res = newAsy.ValidateUser();
Toast.makeText(getBaseContext(), "'"+res+"'", Toast.LENGTH_LONG).show();
两者同时执行,因此 - 由于 AsyncTask 是异步的 - res 的值仍然是“onPreExecute”。
关于java - 为什么 AsyncTask doInBackground 不运行但第二次运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36119879/