Home > Software engineering >  Coil Kotlin Uri to Bitmap throws null pointer exception
Coil Kotlin Uri to Bitmap throws null pointer exception

Time:07-09

Trying to convert a Uri image file to Bitmap in Kotlin fails with a Null Pointer exception. How can I fix this?

var bitmap = remember {  mutableStateOf<Bitmap?>(null)}

LaunchedEffect(key1 = "tobitmap") {
    CoroutineScope(Dispatchers.IO).launch {
        bitmap.value = uriToBitmap(
            context,
            shoppingListScreenViewModel.state.value.imageUri
        )
    }
}

Image(
    bitmap = bitmap.value?.asImageBitmap()!!, //Throws exception here
    contentDescription = ""
)

private suspend fun uriToBitmap(context: Context, uri: Uri?): Bitmap {

    val loader = ImageLoader(context)
    val request = ImageRequest.Builder(context)
        .data(uri)
        .allowHardware(false) // Disable hardware bitmaps.
        .build()

    val result = (loader.execute(request) as SuccessResult).drawable
    val bitmap = (result as BitmapDrawable).bitmap

    val resizedBitmap = Bitmap.createScaledBitmap(
        bitmap, 80, 80, true);

    return resizedBitmap
}

CodePudding user response:

var bitmap = remember {  mutableStateOf<Bitmap?>(null)}

Here, bitmap.value will be null.

Image(
    bitmap = bitmap.value?.asImageBitmap()!!, //Throws exception here
    contentDescription = ""
)

Here, bitmap.value?.asImageBitmap() will be null, since bitmap.value is null. As a result, you will crash with a NullPointerException as soon as you execute this code.

Eventually, bitmap.value will not be null, courtesy of your LaunchedEffect, but that will take some time. You need to rework your composable to be able to work prior to that point in time.

  • Related