我正在创建一个名为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
我已经在一个什么都没做的类中创建了它。
  • 造成此错误的原因是什么?
  • 我该如何解决?
  • 是因为我的类(class)没有扩展AppCompatActivity吗?
  • 最佳答案

    documentation page可以看到,getSharedPreferences方法需要一个关联的上下文。在抽象类中,您没有任何上下文(而在Activity或Fragment中有上下文)。
    由于您正在向抽象类中写入具体方法,因此需要在类构造函数中传递上下文,以便访问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)
        }
    }
    

    09-27 14:54