java - 异步任务 onPost 引发异常
问题描述
我正在异步任务中从 firebase 下载图像,然后将其放在 imageview 中,直到这里,一切都很好。在 onPostExecute() 方法中,我想从我在第一步中放入图像的 imageview 中获取可绘制对象,但它会引发异常,因为它 imageview 不包含任何内容。
public class DownloadPhoto extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
downloadImage();
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Bitmap bitmap = ((BitmapDrawable) image.getDrawable()).getBitmap();
Palette colorPalette = Palette.from(bitmap).generate();
int darkVibrantColor = colorPalette.getDarkVibrantColor(Color.parseColor("#546369"));
title.setTextColor(darkVibrantColor);
details.setTextColor(darkVibrantColor);
}
}
我在下载时没有任何问题,它会正确下载并将图像放入 imageview 中。不过,我最好不要在异步任务中下载主要处理中的图像,但不确定是否可以。
下载图片功能
private void downloadProfileImage() {
downloadImage = new DownloadImage("image_" + id + ".jpg", storageReference);
downloadImage.download(image);
}
下载类
public class DownloadImage {
private String name;
private StorageReference storageReference;
public DownloadImage(String name, StorageReference storageReference) {
this.name = name;
this.storageReference = storageReference;
}
public void download(final ImageView ımageView) {
StorageReference sRef = storageReference.child("images/" + name);
sRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Picasso.get().load(uri).into(ımageView);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.i("resultDownload", e.getLocalizedMessage());
}
});
}
}
解决方案
Try this code
Picasso mPicasso = Picasso.with(this);
mPicasso.load(imageUrl)
.into(image1, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
Drawable drawable = image1.getDrawable();
// ...
}
@Override
public void onError() {
// ...
}
});
推荐阅读
- ios - 如何缩短选择和移动组件的触摸时间?(使用 UICollectionViewDragDelegate)
- javascript - 正则表达式 - 仅完整的单词而不是特定字符之后
- elasticsearch - 在elasticsearch中定义icu变换的规则
- r - R将数据帧从长格式改造成宽格式?
- django - 如何使用 Django 在 Fullcalendar 中编辑和创建事件
- r - 使用 mutate 和 ifelse 进行条件赋值
- javascript - 用javascript单独分割字符串
- docker - neo4j docker 镜像似乎进入休眠状态
- function - 当函数插入字符串时,R Markdown 生成的 pdf 中的德语变音符号出错
- javascript - 循环未在按键时激活 [Chrome 扩展程序]