如何在内部定义带有 sharedPreferences 的顶级函数?
How to define top-level function with sharedPreferences inside?
我试图让所有文件都可以访问这个函数,但是如果我在 Kotlin 文件的 class 之外定义它,它会显示 getSharedPreferences
为 unresolved reference
的错误。我认为这是我的 answer 但我不知道如何声明顶级函数。怎么做到的?
package com.example.app
fun retrieveData() {
val mypref = getSharedPreferences ("mypref", Context.MODE_PRIVATE)
val radiotext=mypref.getString("data","")
}
声明顶级函数就像不将其放在 class 声明的大括号 { }
中一样简单。
只能从 Android 上下文中检索 SharedPreferences。使您的函数成为 Context 的扩展:
fun Context.retrieveData() { //...
然后您可以在任何上下文类型对象中使用它,例如从您的 Activity 中的某个函数调用它。如果从片段(它本身不是上下文对象)调用它,则必须在上下文中调用它:context.retrieveData()
.
将其作为扩展函数只是一种重新排列调用方式的方式。您还可以定义您的函数以获取上下文参数:
fun retrieveData(context: Context) {
val mypref = context.getSharedPreferences("mypref", Context.MODE_PRIVATE)
val radiotext=mypref.getString("data","")
}
在这种情况下,您总是需要传递一个上下文。如果你在 Activity 中,你可以传递 this
或传递 context
,这是 Activity 的 属性。
我看到两个选项:
- 更改函数以将 SharedPreferences 作为参数:
package com.example.app
fun retrieveData(shPref: SharedPreferences): String {
val radioText = shPref.getString("data", "")
return radioText
}
- 将函数更改为 SharedPreferences 对象的扩展,将 SharedPreferences 作为参数:
package com.example.app
fun SharedPreferences.retrieveData(): String {
val radioText = this.getString("data", "")
return radioText
}
而且您显然需要事先获取 SharedPreference 对象才能使用此功能。
我试图让所有文件都可以访问这个函数,但是如果我在 Kotlin 文件的 class 之外定义它,它会显示 getSharedPreferences
为 unresolved reference
的错误。我认为这是我的 answer 但我不知道如何声明顶级函数。怎么做到的?
package com.example.app
fun retrieveData() {
val mypref = getSharedPreferences ("mypref", Context.MODE_PRIVATE)
val radiotext=mypref.getString("data","")
}
声明顶级函数就像不将其放在 class 声明的大括号 { }
中一样简单。
只能从 Android 上下文中检索 SharedPreferences。使您的函数成为 Context 的扩展:
fun Context.retrieveData() { //...
然后您可以在任何上下文类型对象中使用它,例如从您的 Activity 中的某个函数调用它。如果从片段(它本身不是上下文对象)调用它,则必须在上下文中调用它:context.retrieveData()
.
将其作为扩展函数只是一种重新排列调用方式的方式。您还可以定义您的函数以获取上下文参数:
fun retrieveData(context: Context) {
val mypref = context.getSharedPreferences("mypref", Context.MODE_PRIVATE)
val radiotext=mypref.getString("data","")
}
在这种情况下,您总是需要传递一个上下文。如果你在 Activity 中,你可以传递 this
或传递 context
,这是 Activity 的 属性。
我看到两个选项:
- 更改函数以将 SharedPreferences 作为参数:
package com.example.app
fun retrieveData(shPref: SharedPreferences): String {
val radioText = shPref.getString("data", "")
return radioText
}
- 将函数更改为 SharedPreferences 对象的扩展,将 SharedPreferences 作为参数:
package com.example.app
fun SharedPreferences.retrieveData(): String {
val radioText = this.getString("data", "")
return radioText
}
而且您显然需要事先获取 SharedPreference 对象才能使用此功能。