当我通过ViewModel从我的本地数据库DAO使用getData方法并尝试在活动中接收数据时我得到的是null,但是当我使用在活动内部实现的完全相同的function(getData)时,它可以正常工作。我的数据以某种方式无法生存。下面的简化代码。
表格
class FormDao(val realm: Realm) {
fun findById(id: Int): LiveData<Form> {
val liveData = MutableLiveData<Form>()
val form = realm
.where(Form::class.java)
.equalTo("id", id)
.findFirst()!!
liveData.postValue(form)
return liveData
}
}
视图模型
open class NewFormViewModel(private val repository: FormRepository) : ViewModel() {
val realm: Realm by lazy {
Realm.getDefaultInstance()
}
fun getForm(): LiveData<Form> {
return realm.formDao().findById(53)
}
override fun onCleared() {
realm.close()
super.onCleared()
}
}
其工厂等级
class NewFormViewModelFactory(private val repository: FormRepository) :
ViewModelProvider.NewInstanceFactory(){
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return NewFormViewModel(repository) as T
}
}
活动
class NewFormActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_new_form)
val newFormViewModelFactory = NewFormViewModelFactory(repository = FormRepository())
val newFormViewModel = ViewModelProvider(this, newFormViewModelFactory).get(NewFormViewModel::class.java)
val button: Button = findViewById(R.id.addFormButton)
button.setOnClickListener {
var test1 = newFormViewModel.getForm()
Log.v("LOGG", test1.value?.id.toString())
}
}
}
本地数据库中存在id = 53的现有数据,因此我希望在此处获得53作为答案,但由于某种原因其为null。本地数据库工作正常。当我尝试使用retrfoit从远程数据库获取数据时,也会发生同样的事情。太感谢了!