Пустые данные при чтении базы данных с использованием привязки данных

#kotlin #android-recyclerview #android-room

#kotlin #android-recyclerview #android-room

Вопрос:

Прежде всего, я действительно ценю ваше время 🙂 Я пытаюсь получить данные из комнаты и отобразить их в режиме повторного просмотра из действия. Я использую mvvm и привязку данных. Дело в том, что при попытке чтения из базы данных a я получаю null (я зашел в инспектор приложений, чтобы проверить, есть ли у меня данные в базе данных, и да, есть). Ранее я делал то же самое, используя фрагмент, прикрепленный к действию, и это работает. Но теперь, когда речь идет только о другой деятельности, этого не происходит. здесь у вас есть весь мой код по частям.

—gt;Деятельность

 @AndroidEntryPoint class RequestAppointmentActivity : AppCompatActivity() { private lateinit var mBinding: ActivityRequestAppointmentBinding private val args by navArgslt;RequestAppointmentActivityArgsgt;()  private val mainViewModel: MainViewModel by viewModels()  private val mAdapter: RequestAppointmentAdapter by lazy {  RequestAppointmentAdapter(this@RequestAppointmentActivity, mainViewModel)  }   override fun onCreate(savedInstanceState: Bundle?) {  super.onCreate(savedInstanceState)  mBinding = ActivityRequestAppointmentBinding.inflate(layoutInflater)  setContentView(mBinding.root)    mBinding.lifecycleOwner = this  mBinding.mainViewModel = mainViewModel  mBinding.mAdapter = mAdapter   setUpRecyclerView(mBinding.recyclerViewCancerData)   with(mBinding) {  img_doctor.load(args.doctorModel.image)  txtView_doctorName.text = args.doctorModel.name.toString()  txtView_doctorEmail.text = args.doctorModel.email.toString()  txtView_doctorLiscence.text = args.doctorModel.doctorLiscence.toString()  }   }  private fun setUpRecyclerView(recyclerViewCancerData: RecyclerView) {  recyclerViewCancerData.adapter = mAdapter  recyclerViewCancerData.layoutManager =  LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false) }  

—gt; XML-файл с видом переработчика. здесь у вас есть дизайн с точки зрения фотографии (переработчик выделен) введите описание изображения здесь

 lt;datagt;   lt;variable  name="mainViewModel"  type="com.robertconstantindinescu.my_doctor_app.viewmodels.MainViewModel" /gt;  lt;variable  name="mAdapter"  type="com.robertconstantindinescu.my_doctor_app.adapters.RequestAppointmentAdapter" /gt;  lt;/datagt;  lt;androidx.recyclerview.widget.RecyclerView  android:padding="20dp"  **setData2="@{mAdapter}"**  **viewVisibility2="@{mainViewModel.readCancerDataEntity}"**  android:visibility="visible"  android:id="@ id/recycler_view_cancerData"  android:layout_width="match_parent"  android:layout_height="180dp"  android:layout_marginTop="10dp"  app:layout_constraintTop_toBottomOf="@id/doctor_info"  app:layout_constraintEnd_toEndOf="parent"  app:layout_constraintStart_toStartOf="parent"  android:background="@color/white"  tools:listitem="@layout/request_apointment_row" /gt;  

Here using data binding I am trying to get the data from room using flow with live data (i show the code after this part)

—gt;Next is show the bindingAdapter

 class RequestAppointmentBinding { companion object{   @BindingAdapter("viewVisibility2", "setData2", requireAll = false)  @JvmStatic  fun setDataCancer(  view: View,  canceDataEntity: Listlt;CancerDataEntitygt;?,  mapAdapter: RequestAppointmentAdapter?  ){    if (canceDataEntity.isNullOrEmpty()){  when(view){  is ImageView -gt; {view.visibility = View.VISIBLE}  is TextView -gt; {view.visibility = View.VISIBLE}  is RecyclerView -gt; {view.visibility = View.INVISIBLE}  }   }else{  when(view){  is ImageView -gt; {view.visibility = View.INVISIBLE}  is TextView -gt; {view.visibility = View.INVISIBLE}  is RecyclerView -gt; {  view.visibility = View.VISIBLE  mapAdapter?.setData(canceDataEntity)  }  }  }  } }  

}

—gt; Finally here is the room request code from MainViewModel, Repo, LocalDataSource, Dao. (I am using hilt for dependency injection ). Only i show the code that i thinks is needed.

 @HiltViewModel class MainViewModel @Inject constructor( private val repository: Repository, application: Application) : AndroidViewModel(application) { val readCancerDataEntity: LiveDatalt;Listlt;CancerDataEntitygt;gt; =  repository.local.readCancerData().asLiveData()}  class LocalDataSource @Inject constructor( private val dataDao: DataDao){ fun readCancerData():Flowlt;Listlt;CancerDataEntitygt;gt;{  return dataDao.readCancerData() }  @Dao interface DataDao { @Query("SELECT * FROM cancer_data_table") fun readCancerData():lt;Listlt;CancerDataEntitygt;gt;}  

I don’t show the adapter for the recycler because the app crashes before set de recycler adapter. The «error» i related to the binding adapter because I get null always. Maybe because I am reading the database from a different activity it doesn’t start or something…I have no idea, please help! Really appreciate your time! my best wishes!