如何将数据对象保存在 retrofit2 的 sharedpreference 中。更多信息在里面

How to save data object in sharedpreference from retrofit2. More information inside

提问人:Viacheslav Khailenko 提问时间:9/15/2021 更新时间:9/15/2021 访问量:1607

问:

我有数据类:

@Parcelize
data class CurrentUser(
    @SerializedName("id")
    val id: String,
    @SerializedName("name")
    val firstName: String,
    @SerializedName("surname")
    val lastName: String,
    @SerializedName("avatarPath")
    val avatarPath: String,
    @SerializedName("manager")
    val manager: ResourceManager,
    @SerializedName("department")
    val department: Departments,
    @SerializedName("role")
    val role: Role,
    @SerializedName("email")
    val email: String,
    @SerializedName("status")
    val status: String,
    @SerializedName("country")
    val country: Countries,
    @SerializedName("city")
    val city: Cities,
    @SerializedName("activities")
    val activities: List<String>
) : Parcelable

我正在使用 POST 查询(带有改造 2)并获取有关当前用户的信息:

@GET("url")
    suspend fun getCurrentUser(
        @HeaderMap headers: Map<String, String>
    ) : Response<CurrentUser, Error>

我想将此当前用户保存到共享共享首选项中,然后在多个片段中恢复此当前用户

现在它可以工作了,但我在 ViewModel 中获取用户信息,但我想在 SharedPreference 中执行此操作

谢谢

Android Kotlin 共享首选项

评论


答:

1赞 Yoleth 9/15/2021 #1

您应该将其转换为JSON并将其存储为String:

class SharedPreferenceManager(val context: Context) {

    private val PREFS_NAME = "sharedpref"
    val sharedPref: SharedPreferences =
        context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)

    fun saveUSer(user: CurrentUser) {
        sharedPref.edit().putString("user", Gson().toJson(user)).apply()
    }

    fun getUser(): CurrentUser? {
        val data = sharedPref.getString("user", null)
        if (data == null) {
            return null
        }
        return Gson().fromJson(data, CurrentUser::class.java)
    }

}