android - Kotlin : getResources() on a null object reference

标签 android arrays kotlin android-context

我在 kotlin 中创建了这样的颜色数组

private var colorArray = arrayOf(
    ContextCompat.getColor(this, R.color.text_yellow),
    ContextCompat.getColor(this, R.color.text_green),
    ContextCompat.getColor(this, R.color.text_red)
)

当我想通过索引从 colorArray 获取颜色时

var color = colorArray[0]

我在索引 0 上崩溃了,

Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference

我不知道我哪里错了 如果我写 ContextCompat.getColor(this, R.color.text_yellow) 这很好,没有崩溃,但是通过数组索引它给我错误

最佳答案

您将其声明为一个字段:

private var colorArray = arrayOf(
    ContextCompat.getColor(this, R.color.text_yellow),
    ContextCompat.getColor(this, R.color.text_green),
    ContextCompat.getColor(this, R.color.text_red)
)

问题是在调用 onCreate() 方法之前,您的上下文(this 参数)为 null。当您将某物声明为字段时,它会尝试在任何方法调用之前立即对其进行初始化。 (所以在 onCreate 被调用之前)

您可以做的是通过 lazy 调用初始化该字段。 这意味着它实际上仅在首次使用时才被初始化。因此,如果您在 onCreate 之后调用索引,则上下文不会为 null,它应该可以正常工作。

将其更改为:

private var colorArray by lazy { arrayOf(
    ContextCompat.getColor(this, R.color.text_yellow),
    ContextCompat.getColor(this, R.color.text_green),
    ContextCompat.getColor(this, R.color.text_red)
) }

关于android - Kotlin : getResources() on a null object reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55059763/

相关文章:

安卓 : horizontal line with text in middle

android - 当用户在共享选项中点击我的应用程序按钮时,是否有任何方法可以在 YouTube 上方显示我的应用程序的进度条

java - android:background不适用于Theme.MaterialComponents

android - 使用 "Dispatchers.Main"的协程中的代码块未运行

java - 星级显示不正确

android - 其他应用程序上的 float 图标

javascript - Cordova 5.1.1 中的 FormData 相机操作不起作用

c - 使用数组读取和写入文本文件

Java 数据类型 : String and Array

python - 输出是数字列表而不是一个数字