相关疑难解决方法(0)

无法在 AttachBaseContext() 中使用匕首注入的对象来更新语言环境

我正在使用 dagger,并且必须更新 中的语言环境attachBaseContextactivity我将语言环境更新逻辑保留在 LocaleManager 中,并且 LocaleManager 实例已经在 appModule 中,当我尝试在 AttachBaseContext 中使用此 LocaleManager 实例时,我得到空指针异常作为活动的注射发生在attachBaseContext内部 之后onCreate()

android dagger android-7.0-nougat

5
推荐指数
1
解决办法
1457
查看次数

如何使用 Hilt 访问 attachBaseContext 中的注入属性?

为了更改应用程序的默认值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)

android dependency-injection dagger-hilt

3
推荐指数
1
解决办法
407
查看次数