如何在安卓系统中按参数从Firebase数据库中获取数据?



我正在制作一个应用程序,我有一个具有以下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设置为1LearnCode对象的所有titles

相关内容

  • 没有找到相关文章

最新更新