Try extracting bitmap from uri with Fresco

Don't understand the behavior when I retrieve Bitmap using Fresco using ImagePipeline . When I debug my code, it executes onNewResultImpl or onFailureImpl , and when I launch the application it doesn’t work, it doesn’t receive the call onFailureImpl or onNewResultImpl (I check it with Toast and Log when the application starts). I saw this SO question and take ref from it , as well as from Fresco's doc.

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { switch (requestCode) { case ACTION_OPEN_GALLERY: mImageCaptureUri = data.getData(); if (mImageCaptureUri != null) { commentImgView.setImageURI(mImageCaptureUri);//mImageCaptureUri is working fine try { imageRequest = ImageRequestBuilder .newBuilderWithSource(mImageCaptureUri) .setRequestPriority(Priority.HIGH) .setLowestPermittedRequestLevel(ImageRequest.RequestLevel.FULL_FETCH) .build(); dataSource = imagePipeline.fetchDecodedImage(imageRequest, CommentActivity.this); dataSource.subscribe(new BaseBitmapDataSubscriber() { @Override protected void onNewResultImpl(@Nullable Bitmap bitmap) { if (bitmap != null) { bmp = Bitmap.createBitmap(bitmap); Log.d("Bitmap ","after callback"); Toast.makeText(CommentActivity.this,"has bitmap",Toast.LENGTH_SHORT).show(); } else { Log.d("Bitmap is null ","after callback"); Toast.makeText(CommentActivity.this,"bitmap is null",Toast.LENGTH_SHORT).show(); } } @Override protected void onFailureImpl(DataSource<CloseableReference<CloseableImage>> dataSource) { Log.d("Bitmap ","after callback failure"); Toast.makeText(CommentActivity.this,"Failure",Toast.LENGTH_SHORT).show(); } }, CallerThreadExecutor.getInstance()); } catch (Exception e){ e.printStackTrace(); } finally { if (dataSource != null) { dataSource.close(); } } } } } } 

Note. I'm trying to get a bitmap from jpg image not from any animated gif

+6
source share
1 answer

I removed the try and finally block and closed the Datasource inside onNewResultImpl and onFailureImpl

code snippet

 ImageRequest imageRequest = ImageRequestBuilder .newBuilderWithSource(mImageCaptureUri) .setAutoRotateEnabled(true) .build(); ImagePipeline imagePipeline = Fresco.getImagePipeline(); final DataSource<CloseableReference<CloseableImage>> dataSource = imagePipeline.fetchDecodedImage(imageRequest, this); dataSource.subscribe(new BaseBitmapDataSubscriber() { @Override public void onNewResultImpl(@Nullable Bitmap bitmap) { if (dataSource.isFinished() && bitmap != null){ Log.d("Bitmap","has come"); bmp = Bitmap.createBitmap(bitmap); dataSource.close(); } } @Override public void onFailureImpl(DataSource dataSource) { if (dataSource != null) { dataSource.close(); } } }, CallerThreadExecutor.getInstance()); 
+11
source

All Articles