我有一个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
}
为什么我这样说是因为onPreExecute
和onPostExecute
没有执行,因为缺少进度对话框。
答案 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