我正在使用Firebase,我可以使用此代码从Firebase获取数据
String value1 = "Jack"
DatabaseReference data = FirebaseDatabase.getInstance().getReference().child("users");
Query personsQuery = data.orderByChild("desc").equalTo(value1);
一个值很好用,我怎么能得到像这样的数组值的数据
String value1[] = {"Larry", "Moe", "Curly"};
编辑:
此代码列出了所有名称
mPeopleRVAdapter = new FirebaseRecyclerAdapter<Productget, NewsViewHolder>(personsOptions) {
@Override
protected void onBindViewHolder(Product.NewsViewHolder holder, final int position, final Productget model) {
holder.setTitle(model.getTitle());
}
@Override
public Product.NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.product_row, parent, false);
return new Product.NewsViewHolder(view);
}
};
mPeopleRV.setAdapter(mPeopleRVAdapter);
我可以过滤Larry,Moe和Curly的代码吗?
答案 0 :(得分:3)
您可以尝试使用快照获取数据并将其存储到这样的地图中
Map<String, String> map = (Map<String, String>) dataSnapshot.getValue();
选中此answer
答案 1 :(得分:0)
Firebase实时数据库将无法立即执行此操作,您可能需要以其他方式对数据进行结构调整才能获得所需的结果,请参见https://firebase.google.com/docs/database/android/structure-data#best_practices_for_data_structure
例如,您可以执行复合键(如果您尝试一次对不同的子级/字段进行过滤)。您也可以尝试遍历这些不同的条件(“拉里”,“萌”,“弯”),下载整个父节点并过滤自己;取决于您要实现的目标。
如果可以提取所有数据(所有用户),则可以使用HashMap按名称进行过滤,例如:
首先创建并填充HashMap:
HashMap<Stirng, User> hashmap = new HashMap<>();
ValueEventListener userListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
hashmap.put(user.getName(), user);
}
};
mPostReference.addValueEventListener(userListener);
然后在适配器上,您可以过滤数据:
//String value1[] = {"Larry", "Moe", "Curly"};
ArrayList<User> fullNameList = new ArrayList<>(); //filtered users array list
for (int i = 0; i<value1.length; i++){
if(hashmap.containsKey(value1[i])){
fullNameList.add(hashmap.get(value1[i]));
}
}
另一方面,Firestore 支持更复杂的查询:
https://firebase.google.com/docs/firestore/query-data/queries#compound_queries