在 kotlin 中为 SharedPreferences 创建全局变量时出现错误
I am getting error while creating global variable for SharedPreferences in kotlin
我想为 SharedPreferences 创建一个全局变量,但它抛出一个错误并且没有提供任何建议。我应该怎么办?
此错误不会发生在其他小部件中,例如当我定义按钮或编辑文本时,仅在 sharedprefences
中(据我所知)什么也没有发生
class SharedPreferences : AppCompatActivity() {
lateinit var sharedPreferences: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_shared_preferences)
sharedPreferences=this.getSharedPreferences("MAIN_DATA", Context.MODE_PRIVATE)
var pref=this.getSharedPreferences("MAIN_DATA_2", Context.MODE_PRIVATE)
}
}
我怀疑它没有提供错误消息。您可以将光标悬停在错误上,IDE 总是会解释错误是什么。
您的问题是您命名了 class SharedPreferences,与 Android SharedPreferences class 的名称完全相同。由于您的 class 的范围比 Android 更近,因为此代码在您的 class 中,当您将 属性 定义为 SharedPreferences 时,它指的是此 class,而不是 Android。所以 Activity.getSharedPreferences()
没有返回它期望的那种 SharedPreferences。
简单的解决方案是重命名您的 class。按照惯例,Activity 无论如何都应该将单词“Activity”作为其名称的最后一个单词。
第二种解决方案(仅供参考,因为您应该避免创建像这样令人困惑的名称)是明确您希望 SharedPreferences 属性 的类型:
lateinit var sharedPreferences: android.content.SharedPreferences
第三种解决方案是为 Android 类型创建一个类型别名,这样您就可以为它使用不同的名称。例如:
import android.content.SharedPreferences as AndroidPreferences
//...
lateinit var sharedPreferences: AndroidPreferences
旁注,这不是 global 变量。这是一个 class 属性。全局变量将是在任何 class.
之外定义的 属性
我想为 SharedPreferences 创建一个全局变量,但它抛出一个错误并且没有提供任何建议。我应该怎么办? 此错误不会发生在其他小部件中,例如当我定义按钮或编辑文本时,仅在 sharedprefences
中(据我所知)什么也没有发生class SharedPreferences : AppCompatActivity() {
lateinit var sharedPreferences: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_shared_preferences)
sharedPreferences=this.getSharedPreferences("MAIN_DATA", Context.MODE_PRIVATE)
var pref=this.getSharedPreferences("MAIN_DATA_2", Context.MODE_PRIVATE)
}
}
我怀疑它没有提供错误消息。您可以将光标悬停在错误上,IDE 总是会解释错误是什么。
您的问题是您命名了 class SharedPreferences,与 Android SharedPreferences class 的名称完全相同。由于您的 class 的范围比 Android 更近,因为此代码在您的 class 中,当您将 属性 定义为 SharedPreferences 时,它指的是此 class,而不是 Android。所以 Activity.getSharedPreferences()
没有返回它期望的那种 SharedPreferences。
简单的解决方案是重命名您的 class。按照惯例,Activity 无论如何都应该将单词“Activity”作为其名称的最后一个单词。
第二种解决方案(仅供参考,因为您应该避免创建像这样令人困惑的名称)是明确您希望 SharedPreferences 属性 的类型:
lateinit var sharedPreferences: android.content.SharedPreferences
第三种解决方案是为 Android 类型创建一个类型别名,这样您就可以为它使用不同的名称。例如:
import android.content.SharedPreferences as AndroidPreferences
//...
lateinit var sharedPreferences: AndroidPreferences
旁注,这不是 global 变量。这是一个 class 属性。全局变量将是在任何 class.
之外定义的 属性