1

When I try to load some specific images that are somehow distorted I get the below error and then my app crashes:

JNI DETECTED ERROR IN APPLICATION: JNI NewFloatArray called with pending exception java.lang.IllegalArgumentException: Parameter d must be in the range [0..1], was 10.35546875
    java_vm_ext.cc:579]   at void android.graphics.ColorSpace$Rgb$TransferParameters.<init>(double, double, double, double, double, double, double) (ColorSpace.java:2195)
    java_vm_ext.cc:579]   at android.graphics.Bitmap android.graphics.BitmapFactory.nativeDecodeStream(java.io.InputStream, byte[], android.graphics.Rect, android.graphics.BitmapFactory$Options, long, long) (BitmapFactory.java:-2)
    java_vm_ext.cc:579]   at android.graphics.Bitmap android.graphics.BitmapFactory.decodeStreamInternal(java.io.InputStream, android.graphics.Rect, android.graphics.BitmapFactory$Options) (BitmapFactory.java:791)
    java_vm_ext.cc:579]   at android.graphics.Bitmap android.graphics.BitmapFactory.decodeStream(java.io.InputStream, android.graphics.Rect, android.graphics.BitmapFactory$Options) (BitmapFactory.java:766)
    java_vm_ext.cc:579]   at com.facebook.imageutils.ImageMetaData com.facebook.imageutils.BitmapUtil.decodeDimensionsAndColorSpace(java.io.InputStream) (BitmapUtil.java:144)
    java_vm_ext.cc:579]   at com.facebook.imageutils.ImageMetaData com.facebook.imagepipeline.image.EncodedImage.readImageMetaData() (EncodedImage.java:391)
    java_vm_ext.cc:579]   at void com.facebook.imagepipeline.image.EncodedImage.parseMetaData() (EncodedImage.java:356)
    java_vm_ext.cc:579]   at void com.facebook.imagepipeline.producers.NetworkFetchProducer.notifyConsumer(com.facebook.common.memory.PooledByteBufferOutputStream, int, com.facebook.imagepipeline.common.BytesRange, com.facebook.imagepipeline.producers.Consumer) (NetworkFetchProducer.java:178)
    java_vm_ext.cc:579]   at void com.facebook.imagepipeline.producers.NetworkFetchProducer.handleFinalResult(com.facebook.common.memory.PooledByteBufferOutputStream, com.facebook.imagepipeline.producers.FetchState) (NetworkFetchProducer.java:160)
    java_vm_ext.cc:579]   at void com.facebook.imagepipeline.producers.NetworkFetchProducer.onResponse(com.facebook.imagepipeline.producers.FetchState, java.io.InputStream, int) (NetworkFetchProducer.java:112)
    java_vm_ext.cc:579]   at void com.facebook.imagepipeline.producers.NetworkFetchProducer$1.onResponse(java.io.InputStream, int) (NetworkFetchProducer.java:73)
    java_vm_ext.cc:579]   at void com.facebook.imagepipeline.producers.HttpUrlConnectionNetworkFetcher.fetchSync(com.facebook.imagepipeline.producers.HttpUrlConnectionNetworkFetcher$HttpUrlConnectionNetworkFetchState, com.facebook.imagepipeline.producers.NetworkFetcher$Callback) (HttpUrlConnectionNetworkFetcher.java:118)
    java_vm_ext.cc:579]   at void com.facebook.imagepipeline.producers.HttpUrlConnectionNetworkFetcher$1.run() (HttpUrlConnectionNetworkFetcher.java:94)
    java_vm_ext.cc:579]   at java.lang.Object java.util.concurrent.Executors$RunnableAdapter.call() (Executors.java:462)
    java_vm_ext.cc:579]   at void java.util.concurrent.FutureTask.run() (FutureTask.java:266)
    java_vm_ext.cc:579]   at void java.util.concurrent.ThreadPoolExecutor.runWorker(java.util.concurrent.ThreadPoolExecutor$Worker) (ThreadPoolExecutor.java:1167)
    java_vm_ext.cc:579]   at void java.util.concurrent.ThreadPoolExecutor$Worker.run() (ThreadPoolExecutor.java:641)
    java_vm_ext.cc:579]   at void java.lang.Thread.run() (Thread.java:920)
    java_vm_ext.cc:579] 
    java_vm_ext.cc:579]     in call to NewFloatArray
    java_vm_ext.cc:579]     from android.graphics.Bitmap android.graphics.BitmapFactory.nativeDecodeStream(java.io.InputStream, byte[], android.graphics.Rect, android.graphics.BitmapFactory$Options, long, long)

This is how I try to load the image from URL:

public static void loadResizeImage(SimpleDraweeView imageView, String url,
                                   int widthDP, int heightDP)
{ 
    ImageRequest request = ImageRequestBuilder
            .newBuilderWithSource(Uri.parse(url))
            .setResizeOptions(new ResizeOptions(widthDP, heightDP))
            .setLocalThumbnailPreviewsEnabled(false)
            .build();
    DraweeController controller = Fresco.newDraweeControllerBuilder()
            .setImageRequest(request)
            .setOldController(imageView.getController())
            .build();

    try
    {
        imageView.setController(controller);
    }
    catch (IllegalStateException e){
        e.printStackTrace();
    } 
}

This is the image I try to load and it crashes: image

How can I catch this error so my app won't crash?

I read similar questions but I couldn't find any working solution.

stavros.3p
  • 2,244
  • 6
  • 20
  • 37
  • "How can I catch this error so my app won't crash?" -- based on that stack trace, I suspect that you cannot catch this error. This feels like a Fresco bug. – CommonsWare Jul 16 '22 at 12:55

0 Answers0