我一直在寻找答案,但没有人真正回答,因为没有必要使用异步任务;在Android api 11或更高版本中它将强制代码你在主线程上做网络请求所以我必须做异步任务...所以,继承人问题..是否有可能等到异步完成后再继续因为我需要数据用于下一个方法等。
继承我的代码:
public JSONObject getJSONFromUrl(String url) {
this.url = url;
new loadURL().execute();
// Do this when ASYNC HAS FINISHED
return jObj;
}
class loadURL extends AsyncTask <Void, Void, Void> {
protected void onPreExecute() {
}
protected Void doInBackground(Void... unused) {
//do stuff in background
return (null);
}
}
}
对awnser的任何问题都只是发表评论。谢谢你的帮助。
答案 0 :(得分:7)
是的,您使用onPostExecute
的{{1}}方法做任何您想做的事情。 AsyncTask
完成后调用该方法
答案 1 :(得分:1)
如果操作不会花费很长时间(少于几秒钟),您可以使用进度条禁止用户执行任何操作。在AsyncTask
ProgressDialog progress = ProgressDialog.show(LoginScreen.this, "Downloading Users", "Please wait while users are downloaded");
@Override
protected void onPreExecute()
{
progress.setCancelable(false);
progress.isIndeterminate();
progress.show();
}
您仍然希望从onPostExecute()
调用您的方法,因为这样可以阻止用户执行任何操作,但不会阻止任何代码在您调用{{1}的方法中运行1}}来自
答案 2 :(得分:0)
您可以在 doInBackground()方法中执行与网络相关的操作,因为 onPostExecute()方法仅用于Android更新中的UI更新
答案 3 :(得分:0)
这可以通过wait()
s的notify()
,notifyAll()
和object
方法来完成