如何在共享首选项中保存改进响应并使用它



我有post方法,我向服务器发送登录请求但首先我想在我的存储库中使用共享首选项保存响应如何在共享首选项中保存retrofit响应

在我的接口类下面,我实现了登录post请求逻辑

interface MeloApi {
@Headers("Content-Type: application/json")
@POST("/login")
suspend fun makeLogin(@Body loginModel: LoginModel) : Response<LoginModel>

}

下面的loginModel类

data class LoginModel(
val userName:String,
val password:String)

低于LoginResponse.kt

data class LoginResponse(
@SerializedName("accessToken")
val accessToken: String,
@SerializedName("refreshToken")
val refreshToken: String,
@SerializedName("status")
val status: String,
@SerializedName("user")
val user: User
)

我的拦截器

class HeaderInterceptor(
private val tokenManager: TokenManager
) : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
var request = chain.request()
request = request.newBuilder()
.header("refreshToken", tokenManager.refreshToken.toString())
.header("accessToken", tokenManager.accessToken.toString())
.build()
return chain.proceed(request)
}
}

我的令牌管理器

class TokenManager {
var accessToken: String? = null
var refreshToken: String? = null
}

在my appModule.kt下面

val apiModule = module {
single {
TokenManager()
}
single {
HeaderInterceptor(get())
}
single {
val httpInterceptor = HttpLoggingInterceptor()
httpInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY)
Retrofit.Builder()
.client(
OkHttpClient.Builder()
.addInterceptor(HeaderInterceptor(get()))
.addInterceptor(httpInterceptor).build()
)
//           .addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASE_URL)
.build()
.create(MeloApi::class.java)
}
}

我的LoginRepository下面

class LoginRepository(
private val meloApi: MeloApi
) {
suspend fun login(loginModel: LoginModel) {
GlobalScope.launch {

val response = meloApi.makeLogin(loginModel)
response.isSuccessful
val userName = response.body()?.userName
val password = response.body()?.password
loginRequest(userName, password)
}
}
private suspend fun loginRequest(userName: String?, password: String?){


}
}

如果你想作为对象存储,你必须使用序列化/反序列化。

我在这里用了gson

val loginResponse = LoginResponse("AToken", "RToken", "200", User("Edgar"))
val objToString = Gson().toJson(loginResponse)


val sharedPref = context.getSharedPreferences("loginRes", MODE_PRIVATE)
sharedPref.edit().putString("response", objToString).apply()
val response = sharedPref.getString("response", "null")
val stringToObj = Gson().fromJson(response, LoginResponse::class.java)

您可以使用原始数据存储而不是共享首选项。