如何在firebase中搜索(SELECT和WHERE)并将它们放入循环视图

时间:2017-04-08 14:04:28

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

我试图从firebase数据库中的(Confesses表)中检索数据,但不是所有数据,我想对它做一个条件并在recycleView中显示结果,它对我有用,我检索具体的我想要的数据,但它在recycleView中调用一个空行...

我的firebase数据库中有3个对象,两个对象达到我想要的条件,另一个没有实现它...所以当我显示数据时,只有两个对象必须出现,不幸的是所有对象出现,但没有达到条件的对象出现但是空了......请参见下面的图片

This picture shows the problem

初始化:

rView = (RecyclerView) findViewById(R.id.confess_list);
    rView.setHasFixedSize(true);
    rView.setLayoutManager(new LinearLayoutManager(this));
    mFirebaseDatabase = FirebaseDatabase.getInstance().getReference().child("Confesses");
    setupAdapter();
    rView.setAdapter(mPostAdapter);

这是我放置条件的地方

private void setupAdapter() {
    mPostAdapter = new FirebaseRecyclerAdapter<Confess, PostViewHolder>(
            Confess.class,
            R.layout.sample_confess,
            PostViewHolder.class,
            mFirebaseDatabase
    ) {
        @Override
        protected void populateViewHolder(PostViewHolder viewHolder, final Confess model, int position) {
            db = new SQLiteHandler(getApplicationContext());
            final HashMap<String, String> user = db.getUserDetails();

            if (model.getIdReceiver().equals(user.get("idUser"))){
                viewHolder.setContent(StringEscapeUtils.unescapeJava(model.getConfessContent()));
                viewHolder.setDate(model.getCreated_at());
            }


        }
    };
}

ViewHolder类

public static class PostViewHolder extends RecyclerView.ViewHolder {

    public EmojiconTextView emojyView;
    public TextView dateView;


    public PostViewHolder(View itemView) {
        super(itemView);
        emojyView = (EmojiconTextView) itemView.findViewById(R.id.emojicon_text_viewMain);
        dateView = (TextView) itemView.findViewById(R.id.c_date);
    }


    public void setContent(String content) {
        emojyView.setText(content);
    }

    public void setDate(String date) {
        dateView.setText(date);
    }
}

Here is my data structure

2 个答案:

答案 0 :(得分:2)

我通过在我的“FirebaseRecyclerAdapter”中添加了一个过滤器来解决这个问题。 现在它正在工作:D

mPostAdapter = new FirebaseRecyclerAdapter<Confess, PostViewHolder>(
            Confess.class,
            R.layout.sample_confess,
            PostViewHolder.class,
            mFirebaseDatabase.orderByChild("idReceiver").equalTo(userId)
    )

答案 1 :(得分:1)

在Firebase中进行查询将会像

一样
     mFirebaseDatabase = FirebaseDatabase.getInstance()
        .getReference().child("Confesses")
        .orderByChild("YOUR_FIELD").equalTo("Value")
       .getRef() 

但是你不能查询AND,或者......这意味着你的查询中只有一个 orderByChild

还有更多可以使用的查询

.startAt(“”)

<强> .endAt( “”)

<强> .limitToFirst()

<强> .limitToLast()