【问题标题】:java.lang.RuntimeException: Unable to start activity ComponentInfo{}: kotlin.KotlinNullPointerExceptionjava.lang.RuntimeException:无法启动活动 ComponentInfo{}:kotlin.KotlinNullPointerException
【发布时间】:2020-10-28 15:24:42
【问题描述】:

我创建了一个对话框myDialog 并在Settings.kt 活动中对其进行了初始化,当我初始化themeRadioGroup 时出现上述错误,尽管我使用了非空断言运算符(!!) .
我想要做的是使用单选按钮(亮或暗)更改应用程序的主题。这两个单选按钮在一个对话框中,即myDialogSettings.kt 是我要更改主题的活动,所以我想从myDialog 访问单选组。

Settings.kt 活动

class Settings : AppCompatActivity() {
 private lateinit var themeRadioGroup : RadioGroup

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_settings)

        val myDialog = Dialog(this)
        myDialog.setContentView(R.layout.app_info_popup)
        themeRadioGroup = myDialog.findViewById(R.id.theme_radio_group)!!
           
        //...
}

【问题讨论】:

  • 我不明白这种方法... appInfoDialog 是什么?可能你的 R.id.theme_radio_grou 不在 R.layout.activity_settings 范围内,所以是 null
  • 我已经更正了代码,它是 myDialog 而不是 appInfoDialog
  • 是的,theme_radio_group 在其他 xml 文件(对话框)中,我想在 Settings 活动中访问它
  • 好的,我认为 themeRadioGroup 为空,因为对话框没有膨胀,也许如果您显示对话框,那么您可以通过 id 找到您的视图
  • @ManuelMato Dialog.setContentView 立即执行膨胀。

标签: android kotlin nullpointerexception dialog radio-group


【解决方案1】:

!! 是您可以获取 KotlinNullPointerException 的唯一方法。异常意味着您断言该项目非空是错误的。在这种情况下,这意味着您设置的对话框布局中不存在具有该 ID 的视图。

也许您正在寻找的视图在活动布局中,在这种情况下,您应该调用this.findViewById 而不是myDialog.findViewById

否则,请仔细检查您的对话框布局以确保它存在。如果您有多个版本的布局用于不同的配置,请确保它们都有一个具有该 ID 的视图。

您可能想查看view binding,它旨在避免此类问题。

【讨论】:

  • 是的。我现在明白了,这是一个非常愚蠢的错误,我指的是错误的布局文件。
猜你喜欢
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 2014-02-07
  • 2014-01-23
相关资源
最近更新 更多