我知道一个类似的问题已经在这里得到了回答。但那是由于黄油刀库的问题,但我的情况不同。在我的例子中,当我在基本活动中使用dagger injected属性时,它显示了由:kotlin.uninitializedPropertyAccessException引起的错误:lateinit属性pref尚未初始化
abstract class BaseActivity : AppCompatActivity() {
@Inject
lateinit var pref: AppSharedPreferences
@Inject
lateinit var utils: Utils
lateinit var mCurrentLanguage: String
protected lateinit var progressBarUtils: ProgressBarUtils
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
progressBarUtils = ProgressBarUtils(this)
mCurrentLanguage = "EN"
pref.setSelectedLanguage(mCurrentLanguage)
}
}
class LoginActivity : BaseActivity() {
private val TAG = this.javaClass.name
lateinit var loginViewModel: LoginViewModel
@Inject
lateinit var viewModelFactory: LoginViewModelFactory
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
AndroidInjection.inject(this)
loginViewModel = ViewModelProviders.of(this, viewModelFactory).get(
LoginViewModel::class.java)
loadData("abc", "xyz")
observerOnLoginResult()
observerOnLoginError()
}
private fun observerOnLoginError() {
loginViewModel.loginError().observe(this, Observer<String> {
progressBarUtils.cancelProgressDialog()
if (it != null) {
Toast.makeText(this, resources.getString(R.string.error_message) + it,
Toast.LENGTH_SHORT).show()
}
})
}
private fun observerOnLoginResult() {
loginViewModel.loginResult().observe(this,
Observer<LoginModel> {
progressBarUtils.cancelProgressDialog()
if (it != null) {
setData(it)
}
})
}
private fun setData(loginData: LoginModel) {
pref.setCurrentUserName(loginData.data.userName)
}
private fun loadData(email: String, password: String) {
progressBarUtils.showProgressDialog()
val builder = StringBuilder()
var auth = Base64.encodeToString(("$email:$password").toByteArray(), Base64.NO_WRAP)
builder.append("Basic ")
builder.append(auth)
loginViewModel.getLoginData(builder.toString())
}
override fun onDestroy() {
loginViewModel.disposeElements()
super.onDestroy()
}
@Module class AppModule(val app: Application) {
@Provides
@Singleton
fun provideApplication(): Application = app
@Provides
@Singleton
fun provideSharedPreferences(): AppSharedPreferences = AppSharedPreferences(app)
@Provides
@Singleton
fun provideUtils(): Utils = Utils(app)
}
@Module abstract class BuildersModule {
@PerActivity
@ContributesAndroidInjector(modules = arrayOf(LoginModule::class))
abstract fun contributeLoginActivity(): LoginActivity
@PerActivity
abstract fun contributeBaseActivityActivity(): BaseActivity
}
AppComponent
@Singleton @Component(
modules = arrayOf(AndroidInjectionModule::class, AppModule::class, BuildersModule::class))
interface AppComponent {
fun inject(app: LotusApp)
}
在初始化对象之前不能使用它。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) // prefs called in parents onCreate!
setContentView(R.layout.activity_login)
AndroidInjection.inject(this) // injection happens here
按顺序接电话。最简单的修复方法是在调用super.oncreate(...)
之前移动androidinjection.inject(this)
。
Json服务器数据显示,在使用retrofit2和rxjava2的android中,当参数传递给inteface时,会出现错误。 接口
我在我的多个项目中使用了共享首选项的代码,它正常工作,但现在当我在另一个项目中应用相同的代码时,它停止工作。以下是错误
我不知道这是怎么回事 主要活动 我遇到了这个问题 2022-03-18 09:18:27.393 13874-13874/com。实例githubuser2 E/AndroidRuntime:致命异常:主进程:com。实例githubuser2,PID:13874 java。lang.RuntimeException:无法启动活动组件信息{com.example.githubuser2/com.e
我有一个类,我注入到ViewModel ViewModel工厂,当在活动中的onCreate方法中初始化视图模型时,它说传递的值没有初始化。 下面是我的代码 我对Kotlin很陌生,所以尝试过调试,但在这个问题上卡住了。 这是Mainactive代码: 我的ViewModelFactory: 我的班级回购: 这是我收到的错误:
我正在尝试使用Spring-boot+Vaadin创建一个web项目,并且希望使用spring-data-jpa和hibernate从PostgreSQL数据库中获取数据。 在我的Vaadin看来,我尝试自动连接我的服务类,但我总是得到null,而且eror堆栈跟踪没有告诉我原因。 数据库得我得配置: 视图和UI: pom.xml: 我的服务: 更新的解决方案:
我试图将ViewModelFactory注入到活动中,但它总是抛出同样的错误:lateinit属性ViewModelFactory尚未初始化。我找不到我可能做错了什么。请参阅上面我的类中的代码 AppComponent.kt TweetSentimentsApplication.kt