5

我一直在寻找答案,但没有人真正回答,因为为此使用异步任务毫无意义。在 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);
        }

    }   
}

任何要回答的问题都可以发表评论。感谢您的帮助。

4

4 回答 4

6

是的,您使用 的onPostExecute方法AsyncTask来做任何您想做的事情。doInBackground完成后调用该方法

于 2013-06-19T19:46:58.277 回答
0

如果操作不会花费很长时间(少于几秒钟),您可以使用进度条来阻止用户执行任何操作。在你的设置这样的东西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()因为这只会阻止用户执行任何操作,但不会阻止您调用AsyncTaskfrom的方法中的任何代码运行

于 2013-06-19T19:51:44.007 回答
0

这可以通过wait(),notify()和s 的notifyAll()方法来完成object。或者您可以通过interfaces 使用自定义回调。完成获取所需数据后,只需通过回调调用正确的方法即可。

于 2019-10-28T07:58:34.300 回答
-1

您可以在doInBackground()方法中执行与网络相关的操作,因为onPostExecute()方法仅用于 android 中的 UI 更新

于 2014-08-25T04:47:54.877 回答