如何从Android中的Firebase数据库中按参数获取数据?

时间:2018-08-23 16:02:46

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

我正在制作一个应用,并且我有一个具有以下JSON结构的Firebase实时数据库:

{
  "learnhtml": {
    "1534958785102": {
      "id": "1534958785102",
      "title": "What is html",
      "details": "What is html",
      "code": "What is html",
      "status":"1"
    },
    "1534959878751": {
      "id": "1534959878759",
      "title": "",
      "details": "What is html",
      "code": "What is html",
      "status":"1"
    } 
    "1534959878753": {
      "id": "1534959878759",
      "title": "",
      "details": "What is html",
      "code": "What is html",
      "status":"2"
    }
  }
}

所以我想按状态从Firebase数据库检索所有数据,这意味着我想检索all data WHERE status = 1

这是我的班级文件:

public class LearnCode {
    String id;
    String title;
    String details;
    String code;
    String type;
    String status;

    public LearnCode() {}

    public LearnCode(String id, String title, String details, String code, String type, String status) {
        this.id = id;
        this.title = title;
        this.details = details;
        this.code = code;
        this.type = type;
        this.status = status;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDetails() {
        return details;
    }

    public void setDetails(String details) {
        details = details;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}

这是我当前用于获取所有数据的代码

myref = FirebaseDatabase.getInstance().getReference("learnhtml");  
final FirebaseRecyclerAdapter<LearnCode, BlogViewHolder> recyclerAdapter = new FirebaseRecyclerAdapter<LearnCode, BlogViewHolder>(
                    LearnCode.class,
                    R.layout.each_row,
                    BlogViewHolder.class,
                    myref
            ) {
                @Override
                protected void populateViewHolder(BlogViewHolder viewHolder, final LearnCode model, final int position) {
                    progressDialog.dismiss();
                    viewHolder.setTitle(model.getTitle());

                    viewHolder.itemId.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {

                            /*final LearnCode domain = model;

                            rowId = domain.getId();
                            Intent intent = new Intent(shofolotarGolpo.this, Details.class);
                            intent.putExtra("id", rowId);
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivity(intent);*/
                        }
                    });
                }
            };
            recyclerView.setAdapter(recyclerAdapter);
        }

2 个答案:

答案 0 :(得分:0)

一种简单的方法是获取所有元素并仅使用所需的元素

    reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                Iterable<DataSnapshot> mData = dataSnapshot.getChildren();

                for(DataSnapshot d : mData){

                    LearnCode learnCode = d.getValue(LearnCode.class);

                    if(learnCode.getStatus == '1'){
                     //do what u want
                       }

                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

答案 1 :(得分:0)

要解决此问题,您需要使用查询。因此,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("learnhtml").orderByChild("status").equalsTo("1");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            LearnCode learnCode = ds.getValue(LearnCode.class);
            Log.d(TAG, learnCode.getTitle());
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage());
    }
};
query.addListenerForSingleValueEvent(valueEventListener);

logcat中的输出将是titles个对象中所有LearnCode个对象,这些对象的属性status设置为1