没有后备字段或委托的情况下,此注释不适用于目标成员属性

时间:2019-05-20 16:37:11

标签: kotlin dagger-2

这是我的代码:

@Module
class SharedPrefs {
    @Module
    companion object {
        val KEY_COOKIE = "cookie"

        @JvmStatic
        @Provides
        fun putPref(key: String, value: String?) {
            val prefs = PreferenceManager.getDefaultSharedPreferences(App.context)
            val editor = prefs.edit()
            editor.putString(key, value)
            editor.commit()
        }

        @JvmStatic
        @Provides
        fun getPref(key: String): String? {
            val preferences = PreferenceManager.getDefaultSharedPreferences(App.context)
            return preferences.getString(key, null)
        }

        @JvmStatic
        @Provides
        var cookie : String?
            get() = getPref(KEY_COOKIE)
            set(value) {
                putPref(KEY_COOKIE, value)
            }

    }
}

var cookie上方的最后@provides产生以下编译错误:

  

如果没有以下内容,此注释不适用于目标成员属性   支持字段或委托

我该如何纠正?

1 个答案:

答案 0 :(得分:1)

尝试使用@get:Provides代替@Provides上的var cookie

编辑:

顺便说一句,我想我知道Providing这个var的意思,而且我不相信Dagger会允许您这样做。它将只从吸气剂中读取值,并能够在图形中提供Nullable String

您需要将这两个函数(setter的{​​{1}}和getter)包装到某种包装对象中,并在Dagger中提供此包装,而不是{{1 }}。