gpt4 book ai didi

android - NetworkModule 中的 SharedPreferences 实例

转载 作者:行者123 更新时间:2023-11-29 18:29:34 27 4
gpt4 key购买 nike

我面临 SharedPreferences 问题。我想知道如何在 Retrofit 中调用 SharedPreferences。我的意思是,我有以下文件:

@Module
class NetworkModule {

@Provides
internal fun provideGson(): Gson {
return GsonBuilder().create()
}

@Provides
internal fun provideOkHttpClient(): OkHttpClient {
return OkHttpClient.Builder().addInterceptor { chain ->
val original = chain.request()
val requestBuilder = original.newBuilder().addHeader("Accept", "application/json")
val request = requestBuilder.method(original.method(), original.body()).build()
chain.proceed(request)
}.build()
}

@Provides
internal fun provideRetrofit(gson: Gson, okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.baseUrl(BASE_URL)
.client(okHttpClient)
.build()
}
}

在我的 Presenter 中,我有以下代码:

override fun getSavedToken() {
mToken = mSharedPreferences.getString(TOKEN, TOKEN_UNAVAILABLE)
}

...

inner class GetAccessTokenSubscriber : ResourceObserver<AccessTokenBean>() {

override fun onNext(@NonNull accessToken: AccessTokenBean) {
mSharedPreferences.edit().putString(TOKEN, accessToken.token).apply()
getInformation()
}

override fun onError(@NonNull e: Throwable) {
mView?.displayError()
}

override fun onComplete() {
// Nothing to do
}
}

目前,为了设置 token ,我将 Bearer $token 放在我的存储库/服务中

// Repository
val newToken = "Bearer $token"
return mService.getInfos(newToken)

// Service
fun getInfos(@Header("Authorization") token: String

我想知道如何将 Bearer + token 放入我的 NetworkModule 文件中?

感谢您的宝贵时间。

最佳答案

如果您想将值放在拦截器上,只需在拦截器提供程序上调用您的 SharedPreferences 实例:

@Provides
internal fun provideOkHttpClient(sharedPrefs: SharedPrefs): OkHttpClient {
return OkHttpClient.Builder().addInterceptor { chain ->
val original = chain.request()
val requestBuilder = original.newBuilder().addHeader("Accept", "application/json")
val request = requestBuilder.method(original.method(), original.body()).build()
chain.proceed(request)
}.build()
}

现在 dagger 会寻找那个,但它不会找到它,给你一个错误。在这种情况下,如果您的网络模块也是一个单例,只需添加一个 includes = [PreferencesModule::class],如果不是,您可能需要根据您偏好的单例设置当前组件模块位于。

关于android - NetworkModule 中的 SharedPreferences 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56971727/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com