我知道如果我将 AsyncTask 用作内部类,则可以调用方法 getDialog.dismiss 但是由于类中的代码量,如果我尝试调用它说的方法,我决定现在为 AsyncTask 使用另一个类不能从静态上下文中引用非静态方法“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/