当前位置: 首页 > 知识库问答 >
问题:

UninitializedPropertyAccessException:lateinit属性首选项尚未初始化

养枫涟
2023-03-14

我在我的多个项目中使用了共享首选项的代码,它正常工作,但现在当我在另一个项目中应用相同的代码时,它停止工作。以下是错误

object AppPrefrence {
    private const val NAME = "AComputerEngineer"
    private const val MODE = Context.MODE_PRIVATE
    private lateinit var preferences: SharedPreferences

    private val user_id = Pair("user_id","")
    private val ngo_id = Pair("ngo_id","")
    private val IS_LOGIN = Pair("is_login", false)
    private val catagoryName = Pair("Catagory", "")
    private val user_phone = Pair("user_phone", "")


    fun init(context: Context) {
        preferences = context.getSharedPreferences(NAME, MODE)
    }
    //an inline function to put variable and save it
    private inline fun SharedPreferences.edit(operation: (SharedPreferences.Editor) -> Unit) {
        val editor = edit()
        operation(editor)
        editor.apply()
    }
    var userId: String
        get() = preferences.getString(user_id.first, user_id.second) ?: ""
        set(value) = preferences.edit {
            it.putString(user_id.first, value)
        }

    var ngoId: String
        get() = preferences.getString(ngo_id.first, ngo_id.second) ?: ""
        set(value) = preferences.edit {
            it.putString(ngo_id.first, value)
        }
    //SharedPreferences variables getters/setters
    var isLogin: Boolean
        get() = preferences.getBoolean(IS_LOGIN.first, IS_LOGIN.second)
        set(value) = preferences.edit {
            it.putBoolean(IS_LOGIN.first, value)
        }

    var category: String
        get() = preferences.getString(catagoryName.first, catagoryName.second) ?: ""
        set(value) = preferences.edit {
            it.putString(catagoryName.first, value)
        }

    var userPhone:String
    get() = preferences.getString(user_phone.first, user_phone.second)?:""
    set(value) = preferences.edit{
        it.putString(user_phone.first,value)
    }
}
   imgBtn_food?.setOnClickListener(View.OnClickListener {
                var fd = "food"
                catagoryname = fd
                AppPrefrence.category = catagoryname.toString()
                startActivity(Intent(this, Food_Ngo_Activity::class.java))
            })

共有1个答案

韶浩博
2023-03-14

在访问lateInit变量之前,应该对其进行初始化。在您的情况下,可以通过调用方法init()来实现初始化。

因此您的代码如下所示:

AppPrefrence.init(this) // pass your context here
imgBtn_food?.setOnClickListener(View.OnClickListener {
                var fd = "food"
                catagoryname = fd
                AppPrefrence.category = catagoryname.toString()
                startActivity(Intent(this, Food_Ngo_Activity::class.java))
            })
 类似资料:
  • Json服务器数据显示,在使用retrofit2和rxjava2的android中,当参数传递给inteface时,会出现错误。 接口

  • 我知道一个类似的问题已经在这里得到了回答。但那是由于黄油刀库的问题,但我的情况不同。在我的例子中,当我在基本活动中使用dagger injected属性时,它显示了由:kotlin.uninitializedPropertyAccessException引起的错误:lateinit属性pref尚未初始化 AppComponent

  • 我不知道这是怎么回事 主要活动 我遇到了这个问题 2022-03-18 09:18:27.393 13874-13874/com。实例githubuser2 E/AndroidRuntime:致命异常:主进程:com。实例githubuser2,PID:13874 java。lang.RuntimeException:无法启动活动组件信息{com.example.githubuser2/com.e

  • 我有一个类,我注入到ViewModel ViewModel工厂,当在活动中的onCreate方法中初始化视图模型时,它说传递的值没有初始化。 下面是我的代码 我对Kotlin很陌生,所以尝试过调试,但在这个问题上卡住了。 这是Mainactive代码: 我的ViewModelFactory: 我的班级回购: 这是我收到的错误:

  • 我正在尝试使用Spring-boot+Vaadin创建一个web项目,并且希望使用spring-data-jpa和hibernate从PostgreSQL数据库中获取数据。 在我的Vaadin看来,我尝试自动连接我的服务类,但我总是得到null,而且eror堆栈跟踪没有告诉我原因。 数据库得我得配置: 视图和UI: pom.xml: 我的服务: 更新的解决方案:

  • 我试图将ViewModelFactory注入到活动中,但它总是抛出同样的错误:lateinit属性ViewModelFactory尚未初始化。我找不到我可能做错了什么。请参阅上面我的类中的代码 AppComponent.kt TweetSentimentsApplication.kt