我正在开发一个通过 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
回调中执行逻辑,那么如何等待mMasterApointmentData
ViewModel 中的挂起getBarberFullName()
?在这种情况下是否有工具可以帮助LiveData
我?ViewModel