Java 如何等到检索到ViewModel的LiveData

Java 如何等到检索到ViewModel的LiveData,java,android,android-viewmodel,Java,Android,Android Viewmodel,在我的android应用程序中,我有一个片段,其中包含一个带有两个子片段的视图寻呼机。该应用程序使用firebase。我正试图根据在第一个子片段上选择的值对第二个子片段运行查询。此值通过ViewModel传递给第二个值。但是,当我运行应用程序时,它会由于以下错误而崩溃:“java.lang.NullPointerException:无法为child()中的参数“pathString”传递null”。如何让应用程序等待从ViewModel检索并分配值 视图模型代码: public class Ap

在我的android应用程序中,我有一个片段,其中包含一个带有两个子片段的视图寻呼机。该应用程序使用firebase。我正试图根据在第一个子片段上选择的值对第二个子片段运行查询。此值通过ViewModel传递给第二个值。但是,当我运行应用程序时,它会由于以下错误而崩溃:“java.lang.NullPointerException:无法为child()中的参数“pathString”传递null”。如何让应用程序等待从ViewModel检索并分配值

视图模型代码:

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();*/
}