2012-07-20 31 views
1

我不知道爲什麼我的代碼不工作。我讀了很多相同的問題,但這在大多數情況下都是正確的解決方案,但對我而言並不奏效。我的AsyncTask看起來是這樣的:我不能用方法dismiss()停止ProgressDialog;

public class SavingAsync extends AsyncTask<String, String, String> { 
private static final String TAG = "DrawView"; 
private ProgressDialog pd; 
private Context context; 
private File saveFile; 
private Bitmap bitmap; 

public SavingAsync(Context c, File sF, Bitmap b) { 
    context = c; 
    saveFile = sF; 
    bitmap = b; 
} 

@Override 
protected void onPostExecute(String result) { 
    pd.dismiss(); 
    super.onPostExecute(result); 
} 

@Override 
protected void onPreExecute() { 
    pd = new ProgressDialog(context); 
    ProgressDialog.show(context, "", "Saving..."); 
    super.onPreExecute(); 
} 

@Override 
protected String doInBackground(String... params) { 
    OutputStream stream; 
    try { 
     stream = new FileOutputStream(saveFile); 
     bitmap.compress(CompressFormat.PNG, 80, stream); 
     stream.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

}

位圖被成功地保住了,但ProgressDialog永遠運行:/

+0

請查看http://developer.android.com/reference/android/app/DialogFragment.html – 2012-07-20 00:09:55

回答

3

你是顯示ProgressDiaog與

ProgressDialog.show(context, "", "Saving..."); 

和表演方法返回一個PreogressDialog對象。

您正在使用pd參考變量使用pd解僱的對話框。你的代碼中的dismiss()確實可以引用你正在顯示的對話框。您應該將其分配給pd。像這樣

pd = ProgressDialog.show(context, "", "Saving..."); 

,然後調用pd.dismiss()將消失,當前顯示Dialog

+1

哦!對我感到羞恥......非常感謝! – west44 2012-07-20 00:12:36

+0

是的,不要擔心...它會在發佈問題10分鐘後生效。 – west44 2012-07-20 00:18:11