#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!