Dans mon code, je récupère quelques keys
stockés sous une référence puis en utilisant ces touches je récupère les données qui sont stockés sous ces keys
dans la base de données.Impossible d'afficher tous les ensembles de données dans RecyclerView récupérés à partir de Firebase sous les touches qui sont récupérées avant
Voici mon code:
mDatabase.child("child").child(uid).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot.getValue() != null) {
idOfGP = dataSnapshot.getValue().toString();
mDatabase.child("anotherChild").child(idOfGP).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Map<String, String> mapData = (Map<String, String>) dataSnapshot.getValue();
pNames.add(mapData.get("pName"));
pUrls.add(mapData.get("pUrl"));
mDatabase.child("yetAnotherChild").child(idOfGP).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Map<String, String> mapData = (Map<String, String>) dataSnapshot.getValue();
pS = mapData.get("s").trim();
pV = mapData.get("v").trim();
pW = mapData.get("w").trim();
prepareData();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
...
...
} else {
Toast.makeText(getBaseContext(), "No data here", Toast.LENGTH_SHORT).show();
}
}
...
...
});
est ici prepareData()
:
public void prepareData() {
rModelClass = new RModelClass(pS, pNames.get(pNames.size()-1), pUrls.get(pUrls.size()-1), pV, pW);
fastItemAdapter.add(0, rModelClass);
rRV.setAdapter(fastItemAdapter);
rRV.smoothScrollToPosition(0);
}
est ici RModelClass.java
:
public class RModelClass extends AbstractItem<RModelClass, RModelClass.ViewHolder> {
String pS, pWith, pV, pW, pUrl;
public RModelClass() {}
public RModelClass(String pS, String pWith, String pUrl, String pV, String pW) {
this.pS = pS.trim() + " with";
this.pWith = pWith.trim();
this.purl = pUrl;
this.pV = pV.trim();
this.pW = pW.trim();
}
@Override
public int getType() {
return R.id.recycler_view_r_p;
}
@Override
public int getLayoutRes() {
return R.layout.r_p_layout;
}
@Override
public void bindView(RModelClass.ViewHolder holder, List payloads) {
super.bindView(holder, payloads);
holder.pS.setText(pS);
holder.pWith.setText(pWith);
holder.pV.setText(pV);
holder.pW.setText(pW);
holder.pUrl.setText(pUrl);
}
protected static class ViewHolder extends RecyclerView.ViewHolder {
TextView pS, pWith, pV, pW, pUrl;
public ViewHolder(View itemView) {
super(itemView);
pS = (TextView) itemView.findViewById(R.id.p_s);
pWith = (TextView) itemView.findViewById(R.id.p_with);
pV = (TextView) itemView.findViewById(R.id.p_v);
pW = (TextView) itemView.findViewById(R.id.p_w);
pUrl = (TextView) itemView.findViewById(R.id.p_url);
}
}
}
La référence: mDatabase.child("child").child(uid)...
a trois différents keys
y sont stockées, mais ce qui est passe est instea d de montrer 3 différents ensembles de données dans le recyclerview rRV
, 3 mêmes ensembles de données sont affichés. Qu'est-ce que je fais de mal et que dois-je faire pour montrer 3 ensembles de données différents basés sur les 3 clés différentes récupérées de cette référence?
Cela ressemble à un problème de portée. Vous définissez 'pS',' pV', et 'pW' pour les enregistrements récupérés, mais utilisez ensuite différentes variables dans prepareData() plutôt que de les transmettre. De plus, ce n'est pas une repro complète et minimale. Voir [Comment demander] (http://stackoverflow.com/help/how-to-ask) et [créer un mcve] (http://stackoverflow.com/help/mcve). – Kato
@Kato quand j'ai utilisé différentes variables dans prepareData()? Ce sont toutes les variables récupérées dans le code ci-dessus. –
Tout d'abord essayez de rendre 'idOfGP' local (non public) et voyez si cela résoudra votre problème. Si ce n'est pas le cas quand 'prepareData()' est appelé, 'pS',' pNames', 'pUrls' est déjà plein de valeur, le dernier enfant de' pNames' ne recevra qu'un seul élément spécifique (le dernier appelé) – koceeng