将LocalDao getData()与ViewModel一起使用时接收null

当我通过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从远程数据库获取数据时,也会发生同样的事情。太感谢了!

评论