从Firebase到FirebaseRecyclerAdapter的数据选择性检索

时间:2018-11-03 12:43:24

标签: android firebase firebase-realtime-database android-recyclerview firebaseui

在我的Android应用程序中,我将RecyclerViewCardView一起使用。 RecyclerView的内容是从Firebase实时数据库中获取的。为此,我使用了FirebaseUI中的FirebaseRecyclerAdapter。数据库中的条目对应于Bus类的POJO。

public class Bus {
    private String source;
    private String destination;
    private long available;
    private String date;
    private long fare;

    Bus() {

    }

    Bus(String source,String destination,long available,String date,long fare) {
        this.source = source;
        this.destination = destination;
        this.available = available;
        this.date = date;
        this.fare = fare;
    }

    public long getAvailable() {
        return available;
    }

    public long getFare() {
        return fare;
    }

    public String getDate() {
        return date;
    }

    public String getDestination() {
        return destination;
    }

    public String getSource() {
        return source;
    }

    public void setAvailable(long available) {
        this.available = available;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public void setDestination(String destination) {
        this.destination = destination;
    }

    public void setFare(long fare) {
        this.fare = fare;
    }

    public void setSource(String source) {
        this.source = source;
    }

}

在一项活动中,我接受用户的来源,目的地和日期。我的意图是仅在RecyclerView中显示相关数据。这是我的FirebaseRecyclerAdapter代码:

FirebaseRecyclerAdapter<Bus,BusViewHolder> firebaseRecyclerAdapter = new     FirebaseRecyclerAdapter<Bus,BusViewHolder>(Bus.class,R.layout.bus_card,BusViewHolder.class,mDatabase) {
        @Override
        protected void populateViewHolder(BusViewHolder viewHolder,Bus model,int position) {
            if(model.getSource().equals(source) && model.getDestination().equals(destination) && model.getDate().equals(date)) // This is the criteria for displaying the card
            {
                viewHolder.setSource(model.getSource());
                viewHolder.setDestination(model.getDestination());
                viewHolder.setAvailable(model.getAvailable());
                viewHolder.setDate(model.getDate());
                viewHolder.setFare(model.getFare());
            }
        }

    };
    recyclerView.setAdapter(firebaseRecyclerAdapter);

这是我的ViewHolder

public static class BusViewHolder extends RecyclerView.ViewHolder {
    View mView;

    public BusViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
    }

    public void setSource(String source) {
        TextView src = mView.findViewById(R.id.source);
        src.setText("Source " + source);
    }

    public void setDestination(String destination) {
        TextView dest = mView.findViewById(R.id.destination);
        dest.setText("Destination " + destination);
    }

    public void setDate(String date) {
        TextView dte = mView.findViewById(R.id.date);
        dte.setText("Date " + date);
    }

    public void setAvailable(long available) {
        TextView avail = mView.findViewById(R.id.available);
        avail.setText("Available Seats " + Long.toString(available));
    }

    public void setFare(long fare) {
        TextView fre = mView.findViewById(R.id.fare);
        fre.setText("Fare " + Long.toString(fare));
    }
}

此方法的问题在于它显示了相关的卡,但是存在不满足条件的空卡。是否可以有选择地将数据检索到FirebaseRecyclerAdapter中?当前,在RecyclerView中创建的卡总数等于数据库中的总条目数。

1 个答案:

答案 0 :(得分:0)

我使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <button data-num="1">Button</button> <button data-num="2">Button</button> <button data-num="3">Button</button> <button data-num="4">Button</button> <button data-num="5">Button</button>对象有选择地从query中检索。由于Realtime Database不支持多个query子句,因此我必须在节点中添加一个附加字段。这是更新后的orderby

firebaserecycleradapter

请注意,query = mDatabase.orderByChild("sourcedestinationdate").equalTo(source+destination+date); FirebaseRecyclerAdapter<Bus,BusViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Bus,BusViewHolder>(Bus.class,R.layout.bus_card,BusViewHolder.class,query) { @Override protected void populateViewHolder(BusViewHolder viewHolder,Bus model,int position) { viewHolder.setSource(model.getSource()); viewHolder.setDestination(model.getDestination()); viewHolder.setAvailable(model.getAvailable()); viewHolder.setDate(model.getDate()); viewHolder.setFare(model.getFare()); } }; recyclerView.setAdapter(firebaseRecyclerAdapter); 中的最后一个参数是FirebaseRecyclerAdapter