如何先执行然后从AsyncTask返回值?

时间:2014-04-19 06:47:50

标签: android android-asynctask

我有一个AsyncTask,可以完成一些工作并返回一个布尔值。

private class SyncSaleable extends AsyncTask<ItemSaleable, Void, Boolean>{

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            pDialog = new ProgressDialog(ChooseState.this);
            pDialog.setMessage("Please wait...");
            pDialog.setCancelable(false);
            pDialog.show();
        }

        @Override
        protected Boolean doInBackground(ItemSaleable... params) {
            // TODO Auto-generated method stub

            JSONObject syncJSON = userFunctions.setToSaleable(params[0]);
            if(syncJSON.has("success"))
                return true;

            return false;
        }

        @Override
        protected void onPostExecute(Boolean result) {
            // TODO Auto-generated method stub
            if (pDialog.isShowing())
                pDialog.dismiss();
        }

我不确定我目前正在以正确的方式执行此操作。我正在执行这个

boolean state = new SyncTransToDealer().execute(item).get();
if(state){
    //Do some work here
}

为什么我这样说是因为onPreExecuteonPostExecute没有执行,因为缺少进度对话框。

2 个答案:

答案 0 :(得分:3)

查看文档.get()的含义http://developer.android.com/reference/android/os/AsyncTask.html#get()它不是异步的,它会在等待结果时阻塞调用线程。从执行中删除该get方法。

答案 1 :(得分:1)

你应该使用这段代码

if(state){
    //Do some work here
}

onPostExecute

if(result){
//Do some work here
}

并且只有new SyncTransToDealer().execute(item)上的onCreat或您正在使用的其他方法。确保您已在manifest

中提供相关权限