【问题标题】:java.lang.NullPointerException: decodeResource(context.r…rces, R.drawable.ic_logo) must not be nulljava.lang.NullPointerException: decodeResource(context.r…rces, R.drawable.ic_logo) 不能为空
【发布时间】:2021-12-23 01:24:01
【问题描述】:

我正在尝试从音乐中获取专辑封面 uri(如果为 null/空,则在应用可绘制中显示我自己的)

但我明白了:

java.lang.NullPointerException: decodeResource(context.r…rces, R.drawable.ic_logo) 不能为空

Utility.kt

fun getAlbumArtBitmap(context: Context, albumId: Long): Bitmap {
    try {
        return when {
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.P -> {
                val source = ImageDecoder.createSource(
                    context.contentResolver,
                    getAlbumArtUri(albumId)
                )
                ImageDecoder.decodeBitmap(source)
            }
            else -> MediaStore.Images.Media.getBitmap(
                context.contentResolver,
                getAlbumArtUri(albumId)
            )
        }
    } catch (e: FileNotFoundException) {
        Timber.e(e)
    } catch (e: UnsupportedOperationException) {
        Timber.e(e)
    }
    return BitmapFactory.decodeResource(context.resources, R.drawable.ic_logo)
}

drawable(R.drawable.ic_logo)是一个xml矢量drawable(svg导入),位于drawable文件夹中

Player.kt

 val artwork = getAlbumArtBitmap(context, song.albumId)
 putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, artwork)

【问题讨论】:

    标签: java android kotlin bitmap


    【解决方案1】:

    显然,R.drawable.ic_logo 是矢量图。

    我最终使用了这个:

    ContextCompat.getDrawable(context, R.drawable.ic_logo)?.toBitmap()
    

    将可绘制的矢量转换为位图,并且成功了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多