如何从主线程等待AsyncTask的结果?

时间:2014-05-07 09:26:04

标签: android web-services android-asynctask policy

我可以在主线程中使用一种方法来等待AsyncTask的结果(在我的例子中是来自Web服务的值)吗?

我在没有使用AsyncTask的情况下做了一个解决方法,但我知道这不是正确的方法:

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

    StrictMode.setThreadPolicy(policy); 
    }

为了使用AsyncTask,你能帮助提示吗? 感谢。

3 个答案:

答案 0 :(得分:1)

您正在寻找onPostExecute()方法 当后台的所有工作完成后,将调用主线程中的onPostExecute()。

    @Override
    protected void onPostExecute(String result) {

        //Do your stuffs here on Main UI thread.
    }

答案 1 :(得分:0)

你可以使用你的asynctask的onPostExecute来调用主线程的方法,或者只是做你需要做的事情。

private class AsyncCaller extends AsyncTask<Void, Void, Void>{

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        //this method will be running on UI thread

    }
    @Override
    protected Void doInBackground(Void... params) {
        ...
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);

        //this method will be running on UI thread
    }
}

答案 2 :(得分:0)

onPostExecute()

AsyncTask方法在主线程中运行。您可以依赖它来等待来自主线程的AsyncTask的结果。

private class AsyncWait extends AsyncTask<Void, Void, Void>{
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        //Whatever is done here, will run on main thread
    }
    @Override
    protected Void doInBackground(Void... params) {
        //Whatever is done here, will run on background thread
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        //Whatever is done here, will run on main thread
    }
}

从主线程:

new AsyncWait().execute();