我知道,如果我将AsyncTask用作内部类,则可以调用方法getDialog.dismiss,但由于该类中的代码量很大,如果我尝试调用该方法说它为Non-静态方法'getDialog()'不能从静态上下文中引用。我该如何运作?
public class BackgroundImageResize extends AsyncTask<Uri, Integer, byte[]>
{
Bitmap mBitmap;
byte[] mUploadBytes;
Context context;
public BackgroundImageResize(Context ctx) {
context = ctx.getApplicationContext();
}
public BackgroundImageResize(Bitmap bitmap) {
if (bitmap != null) {
this.mBitmap = bitmap;
}
}
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(context, "compressing image",
Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.VISIBLE);
}
@Override
protected byte[] doInBackground(Uri... params) {
try {
mBitmap =
MediaStore.Images.Media.getBitmap(context.getContentResolver(),
params[0]);
} catch (IOException e) {
e.printStackTrace();
}
byte[] bytes;
bytes = getBytesFromBitmap(mBitmap, 70);
return bytes;
}
@Override
protected void onPostExecute(byte[] bytes) {
super.onPostExecute(bytes);
mUploadBytes = bytes;
progressBar.setVisibility(View.INVISIBLE);
//execute the upload task
ChooseImageActivity.mOnInputListener.sendInput(mUploadBytes);
ChooseImageActivity.getDialog().dismiss();
}
public static byte[] getBytesFromBitmap(Bitmap bitmap, int quality) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, stream);
return stream.toByteArray();
}
}
最佳答案
在AsyncTask
的构造函数上传递回调并调用onPostExecute
。
见this
关于java - 如何调用getDialog.dismiss以从另一个类(未嵌套)中的AsyncTask类中消除对话框 fragment ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57092702/