String的 lateinit属性尚未初始化



我刚刚开始学习依赖注入的Hilt,并且在字段注入上,我得到以下错误,即使我已经初始化,lateinit属性someRandomString尚未初始化

Code for Appmodule class
@Module
@InstallIn(SingletonComponent::class)
object AppModule{
@Singleton
@Provides
fun provideApplication(@ApplicationContext app: Context): BaseApplication{
return app as BaseApplication
}
/* provideRandomString is a dependency we can inject to something else.
This string object is gonna exist as long as the Application is alive */
@Singleton
@Provides
fun provideRandomString(): String{
return "Hey look a random string"
}
}

Code for Activity class
@AndroidEntryPoint
class HiltTestActivity : AppCompatActivity() {
private val TAG: String = "AppDebug"
/* Hilt will be looking to any modules for any dependencies that has type string and will inject here */
@Inject
lateinit var someRandomString:String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_hilt_test)
Log.d(TAG, "onCreate: $someRandomString")
}
}

堆栈跟踪

Caused by: kotlin.UninitializedPropertyAccessException: lateinit property someRandomString has not been initialized
at com.example.mvvmtester.view.HiltTestActivity.getSomeRandomString(HiltTestActivity.kt:17)
at com.example.mvvmtester.view.HiltTestActivity.onCreate(HiltTestActivity.kt:23)
at android.app.Activity.performCreate(Activity.java:8000)
at android.app.Activity.performCreate(Activity.java:7984)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)

问题是我的项目gradle classpath插件版本,刚刚更新到最新并解决了

buildscript {

dependencies {
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.42'
}

}

将花括号添加到日志语句中的someRandomString中。这应该能解决问题。

你的:Log.d(TAG, "onCreate: $someRandomString")

试题:Log.d(TAG, "onCreate: ${someRandomString}")

最新更新