Java 如何等到检索到ViewModel的LiveData
在我的android应用程序中,我有一个片段,其中包含一个带有两个子片段的视图寻呼机。该应用程序使用firebase。我正试图根据在第一个子片段上选择的值对第二个子片段运行查询。此值通过ViewModel传递给第二个值。但是,当我运行应用程序时,它会由于以下错误而崩溃:“java.lang.NullPointerException:无法为child()中的参数“pathString”传递null”。如何让应用程序等待从ViewModel检索并分配值 视图模型代码:Java 如何等到检索到ViewModel的LiveData,java,android,android-viewmodel,Java,Android,Android Viewmodel,在我的android应用程序中,我有一个片段,其中包含一个带有两个子片段的视图寻呼机。该应用程序使用firebase。我正试图根据在第一个子片段上选择的值对第二个子片段运行查询。此值通过ViewModel传递给第二个值。但是,当我运行应用程序时,它会由于以下错误而崩溃:“java.lang.NullPointerException:无法为child()中的参数“pathString”传递null”。如何让应用程序等待从ViewModel检索并分配值 视图模型代码: public class Ap
public class AppointmentBookingViewModel extends ViewModel
{
private static MutableLiveData<String> mName = new MutableLiveData<>();
public void setBarberSchedules(String name)
{
mName.setValue(name);
}
public static LiveData<String> getBarberSchedules()
{
return mName;
}
}
第二个子片段:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
appointmentBookingViewModel = new ViewModelProvider(getParentFragment()).get(AppointmentBookingViewModel.class);
AppointmentBookingViewModel.getBarberSchedules().observe(requireActivity(), new Observer<String>()
{
@Override
public void onChanged(@Nullable String s)
{
barberId = s;
/*Toast toast = Toast.makeText(getActivity().getApplicationContext(), s, Toast.LENGTH_SHORT);
toast.show();*/
}
});
}
@Override
public void onStart()
{
super.onStart();
Query query = FirebaseDatabase.getInstance().getReference().child("Users").child("Barbers").child(barberId).child("TimeSlots").child("Day 1").orderByChild("id");
// this is where the error occurs due to barberId being null when this line is executed
@覆盖
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
appointmentBookingViewModel=新的ViewModelProvider(getParentFragment()).get(appointmentBookingViewModel.class);
AppointmentBookingViewModel.getBarberSchedules().observe(Requisitive(),new Observator())
{
@凌驾
公共void onChanged(@Nullable String s)
{
barberId=s;
/*Toast Toast=Toast.makeText(getActivity().getApplicationContext(),s,Toast.LENGTH\u SHORT);
toast.show()*/
}
});
}
@凌驾
public void onStart()
{
super.onStart();
Query Query=FirebaseDatabase.getInstance().getReference().child(“用户”).child(“理发师”).child(“理发师id”).child(“时隙”).child(“第一天”).orderByChild(“id”);
//这是执行此行时由于barberId为null而发生错误的地方
发生这种情况是因为您正在实例化FirebaseDatabase
,而barberId
尚未设置
只要移动这条线
Query query = FirebaseDatabase.getInstance().getReference().child("Users").child("Barbers").child(barberId).child("TimeSlots").child("Day 1").orderByChild("id");
到onChanged
回调
@Override
public void onChanged(@Nullable String s)
{
barberId = s;
Query query = FirebaseDatabase.getInstance().getReference().child("Users").child("Barbers").child(barberId).child("TimeSlots").child("Day 1").orderByChild("id"); // Here
/*Toast toast =
Toast.makeText(getActivity().getApplicationContext(), s, Toast.LENGTH_SHORT);
toast.show();*/
}
成功检索数据后,将调用FirebaseDatabase
进程
@Override
public void onChanged(@Nullable String s)
{
barberId = s;
Query query = FirebaseDatabase.getInstance().getReference().child("Users").child("Barbers").child(barberId).child("TimeSlots").child("Day 1").orderByChild("id"); // Here
/*Toast toast =
Toast.makeText(getActivity().getApplicationContext(), s, Toast.LENGTH_SHORT);
toast.show();*/
}