Java 单击按钮时,我的列表不显示

Java 单击按钮时,我的列表不显示,java,android,android-fragments,viewmodel,Java,Android,Android Fragments,Viewmodel,实际上我在这里找不到任何错误。我想我遗漏了什么。此筛选器按钮不工作。谢谢你的帮助。多谢各位 这是我的fragment.class 这是viewmodel.class 我已更新了viewmodel.class。现在它显示了fragment.class上的另一个错误 public FilterRoomsViewModel(Application application){ super(); FilterRoomsRepository filterRoomsRepository = new

实际上我在这里找不到任何错误。我想我遗漏了什么。此筛选器按钮不工作。谢谢你的帮助。多谢各位

这是我的fragment.class 这是viewmodel.class 我已更新了viewmodel.class。现在它显示了fragment.class上的另一个错误

public FilterRoomsViewModel(Application application){
    super();

FilterRoomsRepository filterRoomsRepository = new FilterRoomsRepository(application);
}
public MutableLiveData<String> getRooms(){
    if (rooms==null){
        rooms = new MutableLiveData<String>();
    }
return rooms;
}
    public LiveData<String> getSortBy() {
if (sortBy == null){
    sortBy = new MutableLiveData<String>();
}
    return sortBy;
} 
public FilterRoomsViewModel(应用程序){
超级();
FilterRoomsRepository FilterRoomsRepository=新的FilterRoomsRepository(应用程序);
}
公共可变LiveData getRooms(){
如果(房间==null){
rooms=新的可变LiveData();
}
返回室;
}
公共LiveData getSortBy(){
if(sortBy==null){
sortBy=new MutableLiveData();
}
返回sortBy;
} 
这是repository.class
if(sortyBy.equals(“升序”)){
Log.i(“排序依据”,“房间按升序排序”);
filterQuery.orderByAscending(“roomRentalAmount”);
}else if(sortyBy.equals(“降序”)){
Log.i(“排序依据”,“房间按降序排序”);
filterQuery.orderByDescending(“roomRentalAmount”);
}否则{
orderByDescending(“updatedAt”);
}
findInBackground(新的FindCallback(){
@凌驾
公共void done(列出对象,parsee异常){
如果(e==null){
//成功
Log.i(“房间”、“过滤房间”+objects.get(0.getObjectId());
房间。设置值(对象);
}否则{
//错误,请相应地处理
Log.e(“错误”、“错误筛选”+e.getMessage());
}
}
});
Log.i(“房间”、“实时数据房间”+Rooms.getValue());
返回室;
}

你说它不显示是什么意思?它没有显示在ui或日志中?因为当你调用GetFilterDrooms时,你不会对结果做任何事情。 我的建议是将存储库调用移动到viewModel,这样您就不用在片段中调用GetFilterDrooms,而是调用viewModel.GetFilterDrooms之类的函数,然后在viewModel中调用存储库,并使用结果设置livedata的值。 然后,在片段中,您只需要观察这个变量,并在此基础上更新ui。通过这样做,可以将逻辑(viewmodel和repository)从ui部分(片段)中分离出来


下面是一个关于如何使用mvvm模式编码的好教程:

它没有显示是什么意思?它没有显示在ui或日志中?因为当你调用GetFilterDrooms时,你不会对结果做任何事情。 我的建议是将存储库调用移动到viewModel,这样您就不用在片段中调用GetFilterDrooms,而是调用viewModel.GetFilterDrooms之类的函数,然后在viewModel中调用存储库,并使用结果设置livedata的值。 然后,在片段中,您只需要观察这个变量,并在此基础上更新ui。通过这样做,可以将逻辑(viewmodel和repository)从ui部分(片段)中分离出来


这里有一个关于如何使用mvvm模式编码的好教程:

你能帮我做一下吗?我会感谢你的。因为我是新手。我在教程的答案中添加了链接。对于初学者,我建议首先阅读mvvm:如何从应用程序逻辑中划分ui,如何使用协同程序等。先生,我已经更新了我的viewmodel。现在它向我展示了这个错误。原因:java.lang.RuntimeException:无法在此行
mViewModel.getSortBy().observe中创建class.viewmodel.FilterRoomsViewModel的实例(this,Observer->{Log.i(“viewmodel”,“viewmodel,sortby:+mViewModel.sortby.getValue());})请创建另一个问题,因为这是一个不同的问题。还有,如果我帮了忙,别忘了把答案投上去;)你能帮我做这个吗?我会感谢你的。因为我是新手。我在教程的答案中添加了链接。对于初学者,我建议首先阅读mvvm:如何从应用程序逻辑中划分ui,如何使用协同程序等。先生,我已经更新了我的viewmodel。现在它向我展示了这个错误。原因:java.lang.RuntimeException:无法在此行
mViewModel.getSortBy().observe中创建class.viewmodel.FilterRoomsViewModel的实例(this,Observer->{Log.i(“viewmodel”,“viewmodel,sortby:+mViewModel.sortby.getValue());})请创建另一个问题,因为这是一个不同的问题。还有,如果我帮了忙,别忘了把答案投上去;)
public FilterRoomsViewModel(Application application){
    super();

FilterRoomsRepository filterRoomsRepository = new FilterRoomsRepository(application);
}
public MutableLiveData<String> getRooms(){
    if (rooms==null){
        rooms = new MutableLiveData<String>();
    }
return rooms;
}
    public LiveData<String> getSortBy() {
if (sortBy == null){
    sortBy = new MutableLiveData<String>();
}
    return sortBy;
} 
    if(sortyBy.equals("ascending")){
        Log.i("Sort by", "Rooms sorted in ascending order");
        filterQuery.orderByAscending("roomRentalAmount");
    }else if (sortyBy.equals("descending")){
        Log.i("Sort by", "Rooms sorted in descending order");
        filterQuery.orderByDescending("roomRentalAmount");
    }else {
        filterQuery.orderByDescending("updatedAt");
    }

    filterQuery.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> objects, ParseException e) {
            if(e == null){
                //success
                Log.i("Rooms", "Filtered rooms, " + objects.get(0).getObjectId());
                rooms.setValue(objects);
            }else{
                //error, handle accordingly
                Log.e("Error", "Error filtering, " + e.getMessage());
            }
        }
    });
    Log.i("Rooms", "Live data rooms, " + rooms.getValue());
    return rooms;
}