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

ProgressDialog を表示しています

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

show メソッドは PreogressDialog オブジェクトを返します。

pdpdを使用して参照変数を使用して閉じているダイアログ。dismiss()あなたのコードでは、表示しているダイアログへの参照が必要です。に割り当てる必要がありpdます。このような

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

そして、呼び出すpd.dismiss()と、現在表示されているDialog.

于 2012-07-20T00:08:09.480 に答える