我一直在努力将图像(我使用uri获取)设置为ImageView
。
我在做什么?
class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
private final WeakReference<Attachment> imageViewReference;
public BitmapWorkerTask(Attachment imageView) {
// Use a WeakReference to ensure the ImageView can be garbage collected
imageViewReference = new WeakReference<Attachment>(imageView);
}
// Decode image in background.
@Override
protected Bitmap doInBackground(Integer... params) {
return ImageResizer.decodeSampledBitmapFromFile(imageViewReference.get().getPath(), 200, 100);
}
// Once complete, see if ImageView is still around and set bitmap.
@Override
protected void onPostExecute(Bitmap bitmap) {
if (imageViewReference != null && bitmap != null) {
final Attachment imageView = imageViewReference.get();
if (imageView != null) {
profilePic.setImageBitmap(bitmap);
}
else {
Log.v("BLAH[Inner]", (imageViewReference ==null) +""+(bitmap == null));
}
}
else {
Log.v("BLAH", (imageViewReference ==null) +""+(bitmap == null));
}
}
}
我已经确认uri是正确的,并且图像的绝对路径也是正确的(在Attachment对象的path属性中设置).Plus位图不为空。
但是imageView仍未显示图像。
更新 图像没有在第一次显示,但在此之后每次都有效。奇怪的是,logcat上也没有显示任何内容。
警告:
使用错误的变量名称(重构出错)
默认图像(在xml中设置)确实显示。看看
我使用了层次结构查看器来检查布局。
答案 0 :(得分:0)
我希望你在manifest中添加了权限:
'Admin'
有时我们会想念小事。
答案 1 :(得分:0)
您使用的setImageBitmap始终有效,但您可以使用以下代码段。
BitmapDrawable ob = new BitmapDrawable(getResources(), bitmap)
imageView.setBackgroundDrawable(ob);
答案 2 :(得分:0)
更改
profilePic.setImageBitmap(bitmap)
到
imageView.setImageBitmap(bitmap)
答案 3 :(得分:0)
根据您提供的信息,似乎文件有问题,或者ImageResizer.decodeSampledBitmapFromFile
无法正常工作,返回空的或透明的位图。
您可以在onPostExecute
中添加此代码并发布结果吗?
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Log.v("BLAH", "width : " + width);
Log.v("BLAH", "height : " + height);
if(width > 0 && height > 0) {
Log.v("BLAH", "pixel : " + bitmap.getPixel(width/2,height/2));
}