簡體   English   中英

Coil Kotlin Uri to Bitmap 拋出空指針異常

[英]Coil Kotlin Uri to Bitmap throws null pointer exception

嘗試在 Kotlin 中將Uri圖像文件轉換為Bitmap失敗,並出現空指針異常。 我怎樣才能解決這個問題?

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
}
var bitmap = remember {  mutableStateOf<Bitmap?>(null)}

在這里, bitmap.value將為null

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

在這里, bitmap.value?.asImageBitmap()將為null ,因為bitmap.valuenull 因此,一旦執行此代碼,您就會崩潰並出現NullPointerException

最終bitmap.value不會是null ,由您的LaunchedEffect提供,但這需要一些時間。 您需要返工您的可組合物以便能夠在該時間點之前工作。

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

非空斷言不是處理這個問題的好方法。

您可能的選項是顯示圖像

bitmap?.value?.asImageBitmap()?.let{ imageBitmap->
   Image(...)
} 

並等待創建位圖,而您什么也不顯示

或最好顯示一個Composable的加載或帶有占位符的Image

if(bitmap.value!= null) {
  Image(...)
} else {
 // Your loading Composable
}

另一種選擇是使用SubcomposeAsyncImage ,它具有用於加載、錯誤和成功可組合插槽的插槽,因此您可以在這些插槽中傳遞您的可組合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM