Je veux afficher les données de tous les enfants dans toutes les catégories de la base de données (j'ai ajouté l'image ci-dessous de ce à quoi ressemble ma base de données). J'ajoute les données à mon RecyclerView en utilisant l'adaptateur qui nécessite le passage de l'objet FirebaseRecyclerOptions. J'ai vu une réponse où DataSnapshot a été utilisé pour obtenir des données enfant par enfant, j'ai essayé d'obtenir les données en utilisant cela et il m'a montré quand je l'ai enregistré dans logcat (le code commenté est ce que j'ai essayé d'utiliser), mais je ne sais pas comment utiliser cela avec ma classe Adapter.
Voici à quoi ressemble ma base de données, je veux les données à l'intérieur des champs surlignés :
{
"Category_wise": {
"education": {
"udemy": { <-Return data of this child
"companyName": "Udemy",
...
},
"khanacademy": { <-Return data of this child
"companyName": "Khan Academy",
...
}
},
"technology": {
"google": { <-Return data of this child
"companyName": "Google",
...
},
"facebook": { <-Return data of this child
"companyName": "Facebook",
...
},
....
}
}
Dans le code ci-dessous, SCard est ma classe de modèle et SCardAdapter est ma classe d'adaptateur.
Voici mon Fragment (HomeFragment) où j'ajoute des données dans le recyclerview :
public class HomeFragment extends Fragment{
private RecyclerView recyclerView;
private Query query;
private SCardAdapter<SCard, SCardAdapter.ViewHolder> adapter;
public HomeFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_home, container, false);
recyclerView = v.findViewById(R.id.search_recyclerview);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setHasFixedSize(true);
setQueryByOrder("technology", "totalInvestors");
fetchResult(query);
return v;
}
// protected void fetchAll(){
// final DatabaseReference reference= FirebaseDatabase.getInstance().getReference("Category_wise");
// reference.addValueEventListener(new ValueEventListener() {
// @Override
// public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
// for (DataSnapshot snapshot : dataSnapshot.getChildren()){
// Log.i(TAG, "4321: Name of each company: " + Objects.requireNonNull(snapshot.child("companyName").getValue()).toString()
// }
// }
// @Override
// public void onCancelled(@NonNull DatabaseError databaseError) {}
// });
// }
protected void setQueryByOrder(String choice, String order){
query = FirebaseDatabase.getInstance()
.getReference()
.child("Category_wise").child(choice).orderByChild(order);
}
protected void fetchResult(Query query) {
FirebaseRecyclerOptions<SCard> options =
new FirebaseRecyclerOptions.Builder<SCard>()
.setQuery(query, new SnapshotParser<SCard>() {
@NonNull
@Override
public SCard parseSnapshot(@NonNull DataSnapshot snapshot) {
return new SCard(
Objects.requireNonNull(snapshot.child("companyName").getValue()).toString()...);
}
})
.build();
adapter = new SCardAdapter<>(options);
adapter.startListening();
recyclerView.setAdapter(adapter);
}
@Override
public void onStart() {
super.onStart();
adapter.startListening();
}
@Override
public void onStop() {
super.onStop();
adapter.stopListening();
}
}
C'est ma classe d'adaptation :
public class SCardAdapter<M extends SCard, V extends SCardAdapter.ViewHolder> extends FirebaseRecyclerAdapter<SCard, V> {
FirebaseRecyclerOptions<SCard> options;
public SCardAdapter(@Nullable FirebaseRecyclerOptions<SCard> options) {
super(options);
this.options = options;
}
@Override
protected void onBindViewHolder(V holder, @SuppressLint("RecyclerView") final int position, SCard model) {
holder.setName(model.getsName());
...
}
@Override
public V onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.startup_search_card, parent, false);
return (V) new ViewHolder(view);
}
public class ViewHolder extends RecyclerView.ViewHolder {
ImageView simg2;
TextView sname, sdesc, senddate, sperraised, snoin, sminam;
ProgressBar sraisingprogbar;
public ViewHolder(View itemView) {
super(itemView);
sname = itemView.findViewById(R.id.sname);
...
}
public void setName(String string) {
sname.setText(string);
}
...
}
}