android - Android Hilt通过共享首选项传递基本网址第二次不起作用
问题描述
在我的应用程序中有一个配置屏幕,用户在其中输入基本 url,然后它将在 app 中使用。我将用户输入的 url 保存在共享首选项中。在我的 Hilt 应用模块类中,我使用像这样的提供从共享首选项传递该 url
@Provides
fun providesBaseUrl(application: Application):String{
return PrefManager.getInstance(application).getString(PreferenceConstants.SERVER_URL)+API_NAME+API_VERSION
}
@Provides
@Singleton
fun provideRetrofit(okHttpClient: OkHttpClient,BASE_URL:String): Retrofit {
return Retrofit.Builder()
.baseUrl(BASE_URL)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxErrorHandlingCallAdapterFactory.create())
.build()
}
如果我在将配置保存在应用程序中后直接登录,这个东西就可以正常工作。但是,如果我注销并关闭应用程序,那么当我重新打开它时,它会不断崩溃,因为它找不到 Base Url 的值。
这是崩溃日志
Process: com.uneecops.plussuite, PID: 15331
java.lang.IllegalArgumentException: Expected URL scheme 'http' or 'https' but no colon was found
at okhttp3.HttpUrl$Builder.parse$okhttp(HttpUrl.kt:1261)
at okhttp3.HttpUrl$Companion.get(HttpUrl.kt:1634)
at okhttp3.HttpUrl.get(Unknown Source:2)
at retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:492)
at com.uneecops.plussuite.AppModule.provideRetrofit(AppModule.kt:40)
at com.uneecops.plussuite.AppModule_ProvideRetrofitFactory.provideRetrofit(AppModule_ProvideRetrofitFactory.java:44)
at com.uneecops.plussuite.base.DaggerBaseApplication_HiltComponents_ApplicationC.getRetrofit(DaggerBaseApplication_HiltComponents_ApplicationC.java:193)
at com.uneecops.plussuite.base.DaggerBaseApplication_HiltComponents_ApplicationC.getApiEndpoints(DaggerBaseApplication_HiltComponents_ApplicationC.java:202)
at com.uneecops.plussuite.base.DaggerBaseApplication_HiltComponents_ApplicationC.access$800(DaggerBaseApplication_HiltComponents_ApplicationC.java:123)
at com.uneecops.plussuite.base.DaggerBaseApplication_HiltComponents_ApplicationC$ActivityRetainedCImpl$ActivityCImpl.getLoginRepo(DaggerBaseApplication_HiltComponents_ApplicationC.java:479)
at com.uneecops.plussuite.base.DaggerBaseApplication_HiltComponents_ApplicationC$ActivityRetainedCImpl$ActivityCImpl.access$2900(DaggerBaseApplication_HiltComponents_ApplicationC.java:279)
at com.uneecops.plussuite.base.DaggerBaseApplication_HiltComponents_ApplicationC$ActivityRetainedCImpl$ActivityCImpl$SwitchingProvider.get(DaggerBaseApplication_HiltComponents_ApplicationC.java:1024)
at com.uneecops.plussuite.ui.login.LoginViewModel_AssistedFactory.create(LoginViewModel_AssistedFactory.java:27)
at com.uneecops.plussuite.ui.login.LoginViewModel_AssistedFactory.create(LoginViewModel_AssistedFactory.java:12)
at androidx.hilt.lifecycle.HiltViewModelFactory.create(HiltViewModelFactory.java:76)
at androidx.lifecycle.AbstractSavedStateViewModelFactory.create(AbstractSavedStateViewModelFactory.java:69)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:54)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:41)
at com.uneecops.plussuite.ui.login.LoginFragment.getViewModel(Unknown Source:2)
at com.uneecops.plussuite.ui.login.LoginFragment.getViewModel(LoginFragment.kt:25)
at com.uneecops.plussuite.base.BaseFragment.onCreate(BaseFragment.kt:55)
at androidx.fragment.app.Fragment.performCreate(Fragment.java:2685)
at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:280)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
at androidx.fragment.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1255)
at androidx.fragment.app.FragmentTransition.calculateFragments(FragmentTransition.java:1138)
at androidx.fragment.app.FragmentTransition.startTransitions(FragmentTransition.java:136)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2001)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1959)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1861)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2641)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2589)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1391)
at android.app.Activity.performStart(Activity.java:7157)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:2937)
我没有在注销时从共享首选项中清除值,但仍然会发生此错误。
解决方案
推荐阅读
- python - Python中的双重检查锁定线程安全吗?
- assembly - QEMU 寄存器和 eip 在 ds 中移动 0x18 后被销毁
- haskell - Haskell - 在 List Monad 中期望 [Char] 时获取 Char 类型
- node.js - ng v 在 cmd 中工作,但在 vs 代码中不工作
- google-chrome-extension - chrome.browserAction, 禁用 图标
- php - 如何配置 XAMPP 将邮件从 localhost 发送到 gmail?
- c# - 是否可以将此 Delphi 函数转换为 C# 方法?如何?
- java - 重试时跳过 observable
- nginx - 为什么我的 URL 重写无法正常工作?
- javascript - 如何将嵌套数据分配给新变量?