2013-05-06 78 views
0

在这之后我的任务:的AsyncTask ProgressDialog停止,回调

public class GetTask extends AsyncTask<String, Void, JSONObject> { 

    // callback 
    private Activity activity; 
    private AsyncTaskCompleteListener callback; 

    private AppUtils appUtils; 

    private ProgressDialog dialog; 
    private String object; 



    public GetTask(Activity act){ 
     this.activity = act; 
     this.callback = (AsyncTaskCompleteListener)act; 
    } 

    protected void onPreExecute() { 
     super.onPreExecute(); 

     dialog = new ProgressDialog(activity); 
     dialog.setTitle("Load..."); 
     dialog.setMessage("Data..."); 
     dialog.setCancelable(true); 

     dialog.setOnCancelListener(new DialogInterface.OnCancelListener() { 

      @Override 
      public void onCancel(DialogInterface dialog) { 
       cancel(false); 

      } 
     }); 

     dialog.show(); 
    } 

    protected JSONObject doInBackground(String... url) { 

     String link = url[0]; 
     object = AppUtils.cutStringAfter(link); 
     link = AppUtils.cutStringBefore(link); 
     return AppUtils.getJSONData(link); 

    } 

    protected void onPostExecute(JSONObject result) { 
     if (null != dialog && dialog.isShowing()) { 
      dialog.dismiss(); 
     } 
     super.onPostExecute(result); 
     callback.onTaskComplete(result, object); 

    } 

    @Override 
     protected void onCancelled() 
     { 
      if (this.dialog != null) { 
       this.dialog.dismiss(); 
      } 
     } 
} 

onTaskComplete调用其他程序解析数据:

@Override 
public void onTaskComplete(JSONObject result, String object) { 
    try { 
     setDBDATA(result, object); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

对话框完整过程setDBDATA(结果,对象)解雇后;,而作品setDBDATA,ProgressDialog冻结。

回调程序之前ProgressDialog有多近,还是防止冻结他?

回答

0

()设置你的ProgressDialog的onDismissListener()和onDismiss调用回调方法()

事情是这样的: -

dialog.setOnDismissListener(new OnDismissListener() { 

    @Override 
    public void onDismiss(DialogInterface dialog) { 
     callback.onTaskComplete(result, object); 
    } 
}); 

希望这有助于。

+0

谢谢,ProgressDialog已关闭。我在其他AsyncTask中尝试setDBDATA incert。 – xck 2013-05-06 10:14:47

0

如果setDBDATA需要很长时间,则将其移动到doInBackground。

在opPostExecute
+0

我不这么认为。当调用SetDBData时,进度应该已经被解除了。 – buptcoder 2013-05-06 05:42:35

+0

@buptcoder这个对话框是否被解除并不重要,建议不要在UI线程中调用最长的方法。 – Bolton 2013-05-06 05:49:03

+0

我完全同意你关于不处理UI线程中的数据。我只想说xck的问题不是由SetDBData引起的。 – buptcoder 2013-05-06 05:55:22