2012-07-20 86 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