我正在制作一个应用程序,我有一个具有以下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);
}
一种简单的方法是获取所有元素并仅使用您需要的元素
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) {
}
});
要解决此问题,您需要使用查询。因此,请使用以下代码:
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 中的输出将是属性status
设置为1
的LearnCode
对象的所有titles
。