Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:如何在Firebase RecyclerView中使用条件DataSnapshot值?_Android_Firebase_Firebase Realtime Database_Firebaseui - Fatal编程技术网

Android:如何在Firebase RecyclerView中使用条件DataSnapshot值?

Android:如何在Firebase RecyclerView中使用条件DataSnapshot值?,android,firebase,firebase-realtime-database,firebaseui,Android,Firebase,Firebase Realtime Database,Firebaseui,我试图查询Firebase并使用查询的DataSnapshot中的条件数据填充回收器适配器。我尝试将populate函数放在if语句中,该语句可以正确记录我想要的数据,但是recycler视图只返回我搜索的节点(我开始的主查询)中的所有内容。关于如何只填充应用于“if”语句的项,有什么建议吗?谢谢大家! rootRef = FirebaseDatabase.getInstance().getReference(); //below is the node i query

我试图查询Firebase并使用查询的DataSnapshot中的条件数据填充回收器适配器。我尝试将populate函数放在if语句中,该语句可以正确记录我想要的数据,但是recycler视图只返回我搜索的节点(我开始的主查询)中的所有内容。关于如何只填充应用于“if”语句的项,有什么建议吗?谢谢大家!

    rootRef = FirebaseDatabase.getInstance().getReference();
    //below is the node i query
    mAlbumQuery = rootRef.child(Constants.FIREBASE_CHILD_ALBUMS).orderByChild("genres");
    mAlbumQuery.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot reco : dataSnapshot.getChildren()) {
                if (reco.getValue().toString().contains(mRecommendation.getGenre())) {
                    //below returns the items i want
                    Log.d("is this correct", reco.getValue().toString());
                    //below returns everything in the original query
                    //how to populate only items that match the above?
                    mAdapter = new FirebaseRecyclerAdapter<Album, AlbumsViewHolder>(
                            Album.class,
                            R.layout.album_cards,
                            AlbumsViewHolder.class,
                            mAlbumQuery) {
                        @Override
                        public void populateViewHolder(AlbumsViewHolder holder, Album album, int position) {
                            holder.bindView(album.getImage(), album.getTitle());
                            if (!album.getGenres().contains(mRecommendation.getGenre())) {
                                //added as a hypothetical... should i have something in here?
                            }
                        }
                    };
                    mAlbumsRecycler.setAdapter(mAdapter);
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    return view;
}
rootRef=FirebaseDatabase.getInstance().getReference();
//下面是我查询的节点
mAlbumQuery=rootRef.child(Constants.FIREBASE\u child\u ALBUMS).orderByChild(“流派”);
addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot记录:DataSnapshot.getChildren()){
if(reco.getValue().toString().contains(mRecommendation.getgreen())){
//下面返回我想要的项目
Log.d(“这是否正确”,reco.getValue().toString());
//下面返回原始查询中的所有内容
//如何仅填充与上述内容匹配的项目?
mAdapter=新的FirebaseRecyclerAdapter(
专辑类,
R.layout.album_卡,
AlbumsViewolder.class,
马尔布姆(查询){
@凌驾
public void populateViewHolder(相册viewholder,相册相册,int位置){
holder.bindView(album.getImage(),album.getTitle());
如果(!album.getGenres().包含(mRecommendation.getGenres())){
//作为假设添加…我应该在这里有东西吗?
}
}
};
mAlbumsRecycler.setAdapter(mAdapter);
}
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
返回视图;
}

如果要提取任何特定节点,您可以使用以下命令:-

String notific = String.valueOf(dataSnapshot.getValue());

int key=dataSnapshot.getKey();
String title=String.valueOf(dataSnapshot.child("title").getValue());
String content=String.valueOf(dataSnapshot.child("content").getValue());

如果您想提取任何特定节点,您可以使用:

String notific = String.valueOf(dataSnapshot.getValue());

int key=dataSnapshot.getKey();
String title=String.valueOf(dataSnapshot.child("title").getValue());
String content=String.valueOf(dataSnapshot.child("content").getValue());

嗯,如果您将
mAlbumQuery
作为param发送到您的
FirebaseRecyclerAdapter
,我相信它的大小就是项目数

作为一个选项(用于快速修复),您可以在此循环中创建新集合和:

for (DataSnapshot reco : dataSnapshot.getChildren()) {
}
您可以用所需的项目填充新集合。
循环之后,您可以创建新适配器并将筛选后的集合传递给它

以下是我的看法:

@Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Collection<> myNewCollection = new Collection<>(); //HashMap, ArrayList - depends on what you are storing in Firebase
            for (DataSnapshot reco : dataSnapshot.getChildren()) {
                if (reco.getValue().toString().contains(mRecommendation.getGenre())) {
                    //below returns the items i want
                    Log.d("is this correct", reco.getValue().toString());
                    //below returns everything in the original query
                    //how to populate only items that match the above?
                    myNewCollection.add(reco.getValue);
                }
            }

            recyclerView.setAdapter(new MyRecyclerViewAdapter(myNewCollection, ...));
        }
@覆盖
公共void onDataChange(DataSnapshot DataSnapshot){
Collection myNewCollection=new Collection();//HashMap,ArrayList-取决于您在Firebase中存储的内容
对于(DataSnapshot记录:DataSnapshot.getChildren()){
if(reco.getValue().toString().contains(mRecommendation.getgreen())){
//下面返回我想要的项目
Log.d(“这是否正确”,reco.getValue().toString());
//下面返回原始查询中的所有内容
//如何仅填充与上述内容匹配的项目?
myNewCollection.add(reco.getValue);
}
}
setAdapter(新的MyRecyclerViewAdapter(myNewCollection,…);
}
另外,请查看和。

有一些有趣的方法-
startAt
endAt
equalTo
,它们可能会对您有所帮助。不幸的是,我没有发现方法
包含
,但上面的方法可能就足够了。

好吧,如果您将
mAlbumQuery
作为参数发送到
FirebaseRecyclerAdapter
,我相信它的大小与项目数相同

作为一个选项(用于快速修复),您可以在此循环中创建新集合和:

for (DataSnapshot reco : dataSnapshot.getChildren()) {
}
您可以用所需的项目填充新集合。
循环之后,您可以创建新适配器并将筛选后的集合传递给它

以下是我的看法:

@Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Collection<> myNewCollection = new Collection<>(); //HashMap, ArrayList - depends on what you are storing in Firebase
            for (DataSnapshot reco : dataSnapshot.getChildren()) {
                if (reco.getValue().toString().contains(mRecommendation.getGenre())) {
                    //below returns the items i want
                    Log.d("is this correct", reco.getValue().toString());
                    //below returns everything in the original query
                    //how to populate only items that match the above?
                    myNewCollection.add(reco.getValue);
                }
            }

            recyclerView.setAdapter(new MyRecyclerViewAdapter(myNewCollection, ...));
        }
@覆盖
公共void onDataChange(DataSnapshot DataSnapshot){
Collection myNewCollection=new Collection();//HashMap,ArrayList-取决于您在Firebase中存储的内容
对于(DataSnapshot记录:DataSnapshot.getChildren()){
if(reco.getValue().toString().contains(mRecommendation.getgreen())){
//下面返回我想要的项目
Log.d(“这是否正确”,reco.getValue().toString());
//下面返回原始查询中的所有内容
//如何仅填充与上述内容匹配的项目?
myNewCollection.add(reco.getValue);
}
}
setAdapter(新的MyRecyclerViewAdapter(myNewCollection,…);
}
另外,请查看和。

有一些有趣的方法-
startAt
endAt
equalTo
,它们可能会对您有所帮助。不幸的是,我没有发现方法
包含
,但上面的方法可能就足够了。

是的,我想我意识到mAlbumQuery需要更改。。。我只是想弄清楚什么应该取代它,我想,或者也许我用另一种方式来处理这个问题。我不确定。我应该在哪里创建您提到的新收藏?谢谢,我今天将对此进行研究,并让您了解它的进展情况。对象上不存在Contains,这就是为什么我必须首先执行toString。我正在搜索字符串属性中的特定关键字,并尝试只返回那些具有该关键字的关键字。是的,我想我意识到mAlbumQuery需要更改。。。我只是想弄清楚应该用什么来取代它,我想,或者也许我会用d来代替它