我正在使用 dagger,并且必须更新 中的语言环境attachBaseContext,activity我将语言环境更新逻辑保留在 LocaleManager 中,并且 LocaleManager 实例已经在 appModule 中,当我尝试在 AttachBaseContext 中使用此 LocaleManager 实例时,我得到空指针异常作为活动的注射发生在attachBaseContext内部 之后onCreate()。
为了更改应用程序的默认值Locale,我必须在Activity内部的方法中访问我的WrapContext类:attachBaseContext
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject lateinit var wrapper: WrapContext
.
.
.
override fun attachBaseContext(newBase: Context?) {
super.attachBaseContext(wrapper.setLocale(newBase!!))
}
}
Run Code Online (Sandbox Code Playgroud)
但是正如您可以想象的那样,nullPointerException因为该字段是在attachBaseContext调用后注入的。
这是WrapContext类:
@Singleton
class WrapContext @Inject constructor() {
fun setLocale(context: Context): Context {
return setLocale(context, language)
}
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
我还尝试在MyApp类中注入WrapContext以便在Activity 中调用它时应该初始化该字段。
@HiltAndroidApp
class MyApp : Application() {
@Inject lateinit var wrapper: WrapContext
}
Run Code Online (Sandbox Code Playgroud)
attachBaseContext 内部活动:
override …Run Code Online (Sandbox Code Playgroud)