2013-05-06 70 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