1

我不知道为什么我的代码不起作用。我读了很多相同的问题,但在大多数情况下这是正确的解决方案,但对我来说不起作用。我的 AsyncTask 看起来像这样:

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 永远运行:/

4

1 回答 1

3

您正在显示 ProgressDiaog

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

并且 show 方法返回一个 PreogressDialog 对象。

pd您正在使用 pd 使用引用变量关闭的对话框。dismiss()在您的代码中确实引用了您正在显示的对话框。您应该将其分配给pd. 像这样

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

然后调用pd.dismiss()将关闭当前显示的Dialog.

于 2012-07-20T00:08:09.480 回答