为什么使用fresco datasource获取位图为空
why use fresco datasource to get bitmap is empty
为什么在 onNewResultImpl
中返回位图为 null?
final ImageView imageView = (ImageView) findViewById (R.id.imageView);
ImageRequest request = ImageRequest.fromUri(pic_uri);
ImagePipeline imagePipeline = Fresco.getImagePipeline();
DataSource dataSource = imagePipeline.fetchEncodedImage(request, this);
CloseableReference<CloseableImage> imageReference = null;
dataSource.subscribe (new BaseBitmapDataSubscriber() {
@Override
protected void onNewResultImpl(Bitmap bitmap) {
LogUtils._d("onNewResultImpl....");
if(bitmap == null) {
LogUtils._d("bitmap is null");
}
imageView.setImageBitmap(bitmap);
}
@Override
protected void onFailureImpl(DataSource dataSource) {
LogUtils._d("onFailureImpl....");
}
}, CallerThreadExecutor.getInstance());
编辑:您使用的是 fetchEncodedImage
而不是 fetchDecodedImage
。这意味着每个图像 returns 都没有底层位图。但是,如果您将其更改为 fetchDecodedImage
并且仍然看到空位图,那将是因为我在下面所写的内容。
并非所有 returned 的图像都是 CloseableBitmap
s,那些不是 return 的图像没有基础位图 return,因此此方法 return是一个空位图。
如果您需要位图,您应该调用 fetchDecodedImage,
而不是 fetchEncodedImage,
。
我已经做了一些修改,使您的代码可以正常工作,请考虑使用它。我也测试过,一切正常。
// To get image using Fresco
ImageRequest imageRequest = ImageRequestBuilder
.newBuilderWithSource( Uri.parse(getFeedItem(position).feedImageUrl.get(index)))
.setProgressiveRenderingEnabled(true)
.build();
ImagePipeline imagePipeline = Fresco.getImagePipeline();
DataSource<CloseableReference<CloseableImage>> dataSource =
imagePipeline.fetchDecodedImage(imageRequest,mContext);
dataSource.subscribe(new BaseBitmapDataSubscriber() {
@Override
public void onNewResultImpl(@Nullable Bitmap bitmap) {
// You can use the bitmap in only limited ways
// No need to do any cleanup.
}
@Override
public void onFailureImpl(DataSource dataSource) {
// No cleanup required here.
}
}, CallerThreadExecutor.getInstance());
为什么在 onNewResultImpl
中返回位图为 null?
final ImageView imageView = (ImageView) findViewById (R.id.imageView);
ImageRequest request = ImageRequest.fromUri(pic_uri);
ImagePipeline imagePipeline = Fresco.getImagePipeline();
DataSource dataSource = imagePipeline.fetchEncodedImage(request, this);
CloseableReference<CloseableImage> imageReference = null;
dataSource.subscribe (new BaseBitmapDataSubscriber() {
@Override
protected void onNewResultImpl(Bitmap bitmap) {
LogUtils._d("onNewResultImpl....");
if(bitmap == null) {
LogUtils._d("bitmap is null");
}
imageView.setImageBitmap(bitmap);
}
@Override
protected void onFailureImpl(DataSource dataSource) {
LogUtils._d("onFailureImpl....");
}
}, CallerThreadExecutor.getInstance());
编辑:您使用的是 fetchEncodedImage
而不是 fetchDecodedImage
。这意味着每个图像 returns 都没有底层位图。但是,如果您将其更改为 fetchDecodedImage
并且仍然看到空位图,那将是因为我在下面所写的内容。
并非所有 returned 的图像都是 CloseableBitmap
s,那些不是 return 的图像没有基础位图 return,因此此方法 return是一个空位图。
如果您需要位图,您应该调用 fetchDecodedImage,
而不是 fetchEncodedImage,
。
我已经做了一些修改,使您的代码可以正常工作,请考虑使用它。我也测试过,一切正常。
// To get image using Fresco
ImageRequest imageRequest = ImageRequestBuilder
.newBuilderWithSource( Uri.parse(getFeedItem(position).feedImageUrl.get(index)))
.setProgressiveRenderingEnabled(true)
.build();
ImagePipeline imagePipeline = Fresco.getImagePipeline();
DataSource<CloseableReference<CloseableImage>> dataSource =
imagePipeline.fetchDecodedImage(imageRequest,mContext);
dataSource.subscribe(new BaseBitmapDataSubscriber() {
@Override
public void onNewResultImpl(@Nullable Bitmap bitmap) {
// You can use the bitmap in only limited ways
// No need to do any cleanup.
}
@Override
public void onFailureImpl(DataSource dataSource) {
// No cleanup required here.
}
}, CallerThreadExecutor.getInstance());