我不是Kotlin的新手,所以也许我缺少明显的东西,但是我无法通过Google找到答案。
如何将Kotlin常数的值设置为strings.xml资源值?我已经尝试过像下面这样,但是会引发以下错误:
由于:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'android.content.res.Resources android.content.Context.getResources()'
这是我的代码,第一个val声明失败:
class MainActivity: AppCompatActivity() {
private val STATUS_PREP = getString(R.string.status_prep) //THIS LINE FAILS
private val STATUS_FIGHT = "fight" //res.getString(R.string.status_fight)
private val STATUS_REST = "rest" //res.getString(R.string.status_rest)
private val STATUS_COMPLETE = "complete" //res.getString(R.string.status_complete)
private val STATUS_PAUSED = "paused" //res.getString(R.string.status_paused)
改为执行此操作。
class MainActivity : AppCompatActivity() {
private STATUS_PREP_2: String by lazy {
getString(R.string.status_prep_2)
}
private lateint var STATUS_PREP: String
override fun onCreate(savedInstanceState: Bundle?) {
// snip
initString()
}
private fun initString() {
STATUS_PREP = getString(R.string.status_prep)
// Init all your string here
}
}
您将收到异常,因为在创建活动实例后未立即初始化context
。
您可以创建一个继承Application类的类,并在其中创建静态字段,该字段将保持对应用程序上下文的引用,如下所示:
class MyApplication: Application() {
companion object {
var context: Context? = null
}
override fun onCreate() {
super.onCreate()
context = applicationContext
}
}
在此之后,将其名称放在AndroidManifest.xml中,如下所示:
<application
android:name="com.yourpackage.MyApplication"
...
// many other tags>
<application>
然后您可以像下面这样简单地在应用程序的任何地方使用它:
class MainActivity : AppCompatActivity() {
private val STATUS_PREP = MyApplication.context!!.getString(R.string.status_prep)
}