尝试使用 Fresco 从 uri 获取位图
Try to fetch bitmap from uri using Fresco
不理解我使用 Fresco
使用 ImagePipeline
获取 Bitmap
时的行为。当我调试我的代码时,它正在执行 onNewResultImpl
或 onFailureImpl
,而当我 运行 时,应用程序不工作意味着它没有被调用 onFailureImpl
或 onNewResultImpl
(我正在使用 Toast
和 Log
检查它,同时 运行 应用程序)。这个我看过SO Question and take ref from it and also 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();
}
}
}
}
}
}
注意:我正在尝试从 jpg 图片 获取位图,而不是从任何 动画 gif 图片
我删除了 try
和 finally
块并关闭了 onNewResultImpl
和 onFailureImpl
中的 Datasource
代码片段
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());
不理解我使用 Fresco
使用 ImagePipeline
获取 Bitmap
时的行为。当我调试我的代码时,它正在执行 onNewResultImpl
或 onFailureImpl
,而当我 运行 时,应用程序不工作意味着它没有被调用 onFailureImpl
或 onNewResultImpl
(我正在使用 Toast
和 Log
检查它,同时 运行 应用程序)。这个我看过SO Question and take ref from it and also 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();
}
}
}
}
}
}
注意:我正在尝试从 jpg 图片 获取位图,而不是从任何 动画 gif 图片
我删除了 try
和 finally
块并关闭了 onNewResultImpl
和 onFailureImpl
Datasource
代码片段
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());