当你为Android应用程序和Kotlin编写代码时,你可能会经常遇到IDE的静态错误,说unresolved reference 一个特定的关键词或变量。
例如,你可以通过调用一个你还没有在代码中定义的自定义函数来产生这个错误:
myFunction("Hello")
// Unresolved reference: myFunction
或者当你在没有声明它们的情况下就分配了一个变量:
myStr = "Hello"
// Unresolved reference: myStr
为了解决这个问题,你需要确保被引用的关键字(无论是变量、函数还是对象)在被调用之前是可用的,并且已经定义。
要声明一个变量,使用val 或var 关键字。要声明一个函数,请使用fun 关键字:
val myStr = "Hello"
fun myFunction(str: String) = print(str)
myFunction(myStr)
// no issues
在编写Android应用程序时,当你导入尚未添加到项目中的库时,这个错误可能会发生。
例如,你可以在你的MainActivity.kt 文件中导入kotlinx 库,如下所示:
package com.example.myapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
如果没有在你的build.gradle 文件中添加kotlin-android-extensions ,上面的import kotlinx 行就会触发unresolved reference 的问题。
为了解决这个问题,你需要把kotlin-android-extensions 添加到build.gradle 文件的plugins 列表中,如下所示:
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-android-extensions'
}
请确保你在你的app 模块内的build.gradle 文件上添加id 'kotlin-android-extensions' 行。
一旦你同步了Gradle构建,错误应该会消失。
如果你在修复问题后仍然看到unresolved reference 错误,请尝试用Mac版的Command + F9 或Windows和Linux版的Control + F9 来构建你的Android应用程序。
构建完成后,该错误应该会消失。
总而言之,当Kotlin不知道你在文件中输入的关键字指向什么时,就会发生unresolved reference 错误。
它可能是一个函数,一个变量,或另一个你尚未在代码中声明的语言结构。
或者也可能是你还没有添加到当前项目中的外部Android和Kotlin库。
例如,你可能遇到一个错误,说Unresolved reference: Volley ,如下:
val queue = Volley.newRequestQueue(this)
// Unresolved reference: Volley
这是因为Volley 库还没有被添加到Android项目中。
如果你点击有问题的代码行上的红色灯泡图标,Android Studio有几个建议来解决这个错误,其中一个是帮助你自动导入依赖关系。

Android Studio未解决的引用帮助行动
(android-unresolved-reference-kotlin.png)
在这种情况下,你可以简单地点击上面的高亮选项,Android Studio将为你解决这个问题。
但是其他库可能没有这样的选项,所以你需要在你的app 模块的build.gradle 文件中手动导入它们。
一旦你指定了导入,别忘了再次同步Gradle构建,将库下载到你的项目中。
祝你在修复未解决的参考文献问题上好运!👍