说我有一个拥有宠物的用户的应用程序。
根据我在不同来源阅读的内容,这是在Firebase DB中建模关系的有效方法:
{
"users":{
"user1":{
"name":"Arthur",
"pets":{
"pet1":true,
"pet2":true
}
},
"user2":{
"name":"George",
"pets":{
"pet3":true,
"pet4":true
}
}
},
"pets":{
"pet1":{...},
"pet2":{...},
"pet3":{...},
"pet4":{...}
}
}
假设我有一个Android应用程序,我想提供所有用户的列表,并在每个列表项中也提到用户拥有的宠物。
我想要的是一个User对象列表,其中每个User对象都有一个Pet对象列表。例如:
public class User {
public String name;
public List<Pet> pets;
...
}
查询数据库以获得此结果的最佳方法是什么?
答案 0 :(得分:0)
考虑到您拥有FirebaseDatabase实例
,首先需要查询databaseQuery = firebaseDatabase.child("users").child("user1").orderByChild("name");
如果您想了解有关如何在Firebase中执行常见SQL查询的更多信息,可以在此处阅读Common SQL Queries Converted for Firebase
然后使用FirebaseUI,您可以按照自己的方式显示数据。
要将firebase对象映射到POJO,我使用了FirebaseUI
adapter = new FirebaseRecyclerAdapter<POJOClass, CustomVH>(POJOClass.class, R.layout.your_layout_file, CustomVH.class, databaseQuery)
{
@Override
protected void populateViewHolder(final CustomVH viewHolder,final POJOClass model, int position)
{
viewHolder.setListItemTitle(model.getItem());
viewHolder.setListItemCategory(model.getCategory());
viewHolder.setImageView(model.getDownloadImageUrl(),getContext());
}
};
recyclerView.setAdapter(adapter);
我的ViewHolder类为:
public class CustomVH extends RecyclerView.ViewHolder {
private final TextView listItemTitle;
public CheckBox checkBox;
private final TextView listItemCategory;
private ImageView imageView;
public CustomVH(View itemView)
{
super(itemView);
listItemTitle = (TextView) itemView.findViewById(R.id.listItemText);
checkBox = (CheckBox) itemView.findViewById(R.id.checkBoxListItem);
listItemCategory = (TextView) itemView.findViewById(R.id.listItemCategoryText);
imageView = (ImageView) itemView.findViewById(R.id.customMyBucketListItemImage);
deleteButton = (ImageButton) itemView.findViewById(R.id.listItemDeleteButton);
}
public void setListItemTitle(String name)
{
listItemTitle.setText(name);
}
public void setListItemCategory(String category)
{listItemCategory.setText(category);}
public void setImageView(String imageUrl, Context context)
{
//set your imageview
}
}