Firebase等于多个值

时间:2018-07-23 18:22:09

标签: android firebase firebase-realtime-database

我正在使用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的代码吗?

2 个答案:

答案 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