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
}
>Solution :
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.