我正在开发一个通过 apollo-android 从 graphql 服务器获取数据的应用程序。
我对我的 aws rds 数据库进行了一次提取。我在onCreate()我的 CalendarFragment 中进行此获取。
问题是,在onViewCreated(),我想将我的 textview 设置为获取的字段之一,名字和姓氏。因此,我运行getBarberFullName返回String值的方法mBarberFullName。我试图在视图模型处理所有逻辑方法时跟随 UI 控制器显示。getBarberFullName驻留在我的 ViewModel 中。
public String getBarberFullName() {
if (appointmentsAreNull()) return mBarberFullName.getValue();
AppointmentModel am = mMasterAppointments.getValue().get(0);
String fullName = am.bFirstName;
fullName = fullName.concat(" " + am.bLastName);
// Get the logged in barber's full name and set it as mBarberFullName.
mBarberFullName.setValue(fullName);
return mBarberFullName.getValue();
}
哪里mMasterAppointments是MutableLiveData<List<AppointmentModel>>。在我的onViewCreated()回调中,我运行
String barberName = mBarberViewModel.getBarberFullName();
mTxtv_barberName.setText(barberName);
但是,mMasterAppointments始终为 null,因此它只返回 mBarberFullName 的默认值,即String.
但是,如果我要运行以下代码,同样onViewCreated(),我会得到所需的结果,其中 textview 使用所需的理发师的全名进行更新。
mBarberViewModel.getAllAppointments().observe(getViewLifecycleOwner(), am -> {
if (am.isEmpty()) {
Log.d(TAG, "No barber.");
return;
}
String barberGreeting;
barberGreeting = am.get(0).bFirstName;
barberGreeting = barberGreeting.concat(" " + am.get(0).bLastName);
mTxtv_barberName.setText(barberGreeting);
});
getAllAppointments返回mMasterAppointments位于我的 ViewModel 中的观察者。
虽然getAllAppointments和getBarberFullName在 内被调用onViewCreated(),但一个能够访问 的挂起值,mMasterAppointments而另一个则不能。为什么?
我不想在 FragmentsonViewCreated回调中执行逻辑,那么如何等待mMasterApointmentDataViewModel 中的挂起getBarberFullName()?在这种情况下是否有工具可以帮助LiveData我?ViewModel