空对象引用上的“boolean java.lang.Class.isInterface()”

'boolean java.lang.Class.isInterface()' on a null object reference

提问人:Sohaib Ahmed 提问时间:7/5/2023 最后编辑:Sohaib Ahmed 更新时间:7/10/2023 访问量:844

问:

我在 Android 13 上遇到以下代码崩溃。

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Class.isInterface()' on a null object reference

法典:

val temp = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) 
    bundle.getParcelable(ARG_TAG, Tab::class.java)
else 
    bundle.getParcelable(ARG_TAG)

DataClass(选项卡)如下所示:

@Keep
@Parcelize
data class Tab(
    val data: List<String>? = null,
    val icon: String? = null,
    val provider: String? = null,
    val subtype: String? = null,
    val title: String,
    val items: Int = 0
) : Parcelable
Kotlin NullPointerException 可打包 Android-13

评论


答:

5赞 Sohaib Ahmed 7/10/2023 #1

我已经找到了解决方案,通过使用 Android-13 的推荐方法BundleCompat

val temp = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) 
    BundleCompat.getParcelable(bundle, ARG_TAG, Tab::class.java)
else 
    bundle.getParcelable(ARG_TAG)

评论

0赞 Bitwise DEVS 9/24/2023
活动意图怎么样?这个问题似乎困扰着 Android 13,以至于它也只出现在发布版本中。
0赞 Sohaib Ahmed 9/25/2023
您也可以更新意图,
0赞 diAz 10/5/2023
检查已经在里面完成了。BuildCompat.isAtLeastU()
0赞 Sohaib Ahmed 10/5/2023
感谢您的分享,它已被弃用并声明为“Android UpsideDownCase 是最终版本,此方法不再是”+“必要。它将在此库的未来版本中删除。请改用“+”。Build.VERSION.SDK_INT >= 34
0赞 Stuart Fisher 11/1/2023
谢谢。我遇到了同样的问题,您的解决方案也为我解决了这个问题。我从事专业开发人员已有近 30 年,我从未遇到过像 Android 这样繁琐的平台!
1赞 V-master 12/5/2023
对于任何想知道 API 33 实现出了什么问题的人,这里是 Google Dev 的描述 issuetracker.google.com/issues/240585930#comment6