获取片段或活动之外的getSharedPreferences的引用

问题描述 投票:2回答:2

感谢您的光临!不是Unresolved reference: getPreferences的副本,因为它们有片段问题,而我有抽象类问题

我正在创建一个名为Inspector的abstract类。此类主要用于检查低级内容,例如该应用程序是首次运行还是可以正常运行的互联网,等等。

这是我的第一次检查首次运行的实现:


import android.content.SharedPreferences

abstract class Inspector{
    private var PRIVATE_MODE = 0
    private var firstRun : String = "first_run"

    //Function returns if the app was run for the first time or not
    fun firstRun(): Boolean{
        return checkPref(firstRun)
    }

    private fun checkPref(PREF_NAME : String): Boolean {
        val sharedPref: SharedPreferences = getSharedPreferences(PREF_NAME, PRIVATE_MODE)
        return sharedPref.getBoolean(PREF_NAME, false)
    }
}

这就是我Inspector.kt文件中的全部。但是我一直被这个问题困扰:

Unresolved reference: getSharedPreferences

我已经在一个还没有做任何事情的类中创建了这个。

  • 此错误的可能原因是什么?
  • 我该如何解决?
  • 是因为我的课没有扩展AppCompatActivity吗?
android kotlin sharedpreferences
2个回答
1
投票
getSharedPreferences中可以看到,

documentation page方法需要一个关联的上下文。在抽象类中,您没有任何上下文(而在Activity或Fragment中有上下文)。由于您正在将具体方法写入抽象类中,因此需要在类构造函数中传递context才能访问sharedPreferences:

abstract class Inspector(private val context : Context){
    private var PRIVATE_MODE = 0
    private var firstRun : String = "first_run"

    //Function returns if the app was run for the first time or not
    fun firstRun(): Boolean{
        return checkPref(firstRun)
    }

    private fun checkPref(PREF_NAME : String): Boolean {
        val sharedPref: SharedPreferences = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE)
        return sharedPref.getBoolean(PREF_NAME, false)
    }
}

2
投票

您必须将上下文作为构造函数参数传递请使用以下代码更改您的课程。希望对您有帮助

abstract class Inspector(val context: Context){
    private var PRIVATE_MODE = 0
    private var firstRun : String = "first_run"

    //Function returns if the app was run for the first time or not
    fun firstRun(): Boolean{
        return checkPref(firstRun)
    }

    private fun checkPref(PREF_NAME : String): Boolean {
        val sharedPref: SharedPreferences = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE)
        return sharedPref.getBoolean(PREF_NAME, false)
    }
}

创建类对象时在构造函数参数中传递活动或片段对象。

© www.soinside.com 2019 - 2024. All rights reserved.