0

我试图让这个函数可以从所有文件中访问,但是如果我在 Kotlin 文件的类之外定义它,它会显示getSharedPreferencesas 的错误unresolved reference。我认为这是我的答案,但我不知道如何声明顶级函数。怎么做?

package com.example.app
    fun retrieveData() {
        val mypref = getSharedPreferences ("mypref", Context.MODE_PRIVATE)
        val radiotext=mypref.getString("data","")
    }
4

2 回答 2

3

声明一个顶级函数就像不把它放在{ }类声明的大括号中一样简单。

只能从 Android 上下文中检索 SharedPreferences。使您的函数成为 Context 的扩展:

fun Context.retrieveData() { //...

然后,您可以在任何 Context 类型的对象中使用它,例如从 Activity 中的某个函数调用它。如果从 Fragment (本身不是 Context 对象)调用它,则必须在上下文中调用它:context.retrieveData().

使它成为一个扩展函数只是重新安排你如何调用它的一种方式。你也可以定义你的函数来接受一个 Context 参数:

fun retrieveData(context: Context) {
    val mypref = context.getSharedPreferences("mypref", Context.MODE_PRIVATE)
    val radiotext=mypref.getString("data","")
}

在这种情况下,您总是需要传递一个上下文。如果你在一个 Activity 中,你可以 passthis或 pass context,这是一个 Activity 的属性。

于 2019-12-03T21:19:08.030 回答
1

我看到两个选项:

  1. 更改函数以将 SharedPreferences 作为参数:
package com.example.app

    fun retrieveData(shPref: SharedPreferences): String {
        val radioText = shPref.getString("data", "")
        return radioText
    }
  1. 将函数更改为 SharedPreferences 对象的扩展,将 SharedPreferences 作为参数:
package com.example.app

    fun SharedPreferences.retrieveData(): String {
        val radioText = this.getString("data", "")
        return radioText
    }

而且您显然需要事先获取 SharedPreference 对象才能使用此功能。

于 2019-12-03T21:27:29.273 回答