6 votes

Impossible de lire les données dans la base de données Firebase en tant que liste

Les données dans firebase sont les suivantes

data image here

Je veux obtenir les données étiquetées comme userId sous forme de liste ou de tableau.

ma méthode est :

public static void writePostToFriends(final String userId, final String userName, final String title, final String body, final String authorPhoto){
    DatabaseReference mpostRef = FirebaseDatabase.getInstance().getReference().child("social/user/"+userId+"/friends");
    mpostRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            GenericTypeIndicator<List<Friends>> t = new GenericTypeIndicator<List<Friends>>() {};
            List<Friends> mFriends = dataSnapshot.getValue(t);
            long j = mFriends.size();
            for (long i = 0; i == j; i++){
                Friends mReadFriends = dataSnapshot.getValue(Friends.class);
                String getUid = mReadFriends.userID;
                writeNewPost(getUid, userId, userName, title, body, authorPhoto);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

mais quand il essaye de lire, il donne cette erreur -

Processus : com.evolutionstudios.atmiyo, PID : 19506 com.google.firebase.database.DatabaseException : Attendu une liste lors de la désérialisation, mais obtenu une classe java.util.HashMap at com.google.Android.gms.internal.zzanp.zza(Source inconnue) at com.google.Android.gms.internal.zzanp.zza(Source inconnue) at com.google.Android.gms.internal.zzanp.zza(Source inconnue) at com.google.firebase.database.DataSnapshot.getValue(Source inconnue) at com.evolutionstudios.atmiyo.Utils.NotificationHelper$1.onDataChange(NotificationHelper.java:40) at com.google.Android.gms.internal.zzakg.zza(Source inconnue) at com.google.Android.gms.internal.zzalg.zzcxk(Source inconnue) at com.google.Android.gms.internal.zzalj$1.run(Source inconnue) at Android.os.Handler.handleCallback(Handler.java:739) at Android.os.Handler.dispatchMessage(Handler.java:95) at Android.os.Looper.loop(Looper.java:148)

quelqu'un peut-il m'aider à comprendre comment obtenir l'ID utilisateur dans les données sous forme de tableau ou de liste ?

23voto

Frank van Puffelen Points 16029

Le message d'erreur en contient l'essentiel :

Je m'attendais à une liste lors de la désérialisation, mais j'ai obtenu une classe java.util.HashMap.

Si vous regardez votre base de données, vous voyez une collection de clés+valeurs. En Java, cela se traduit par un Map et non à un List .

Si vous n'êtes intéressé que par les valeurs, vous devez vous charger de la conversion à partir de l'interface de l'utilisateur. Map a la List dans votre code :

public void onDataChange(DataSnapshot dataSnapshot) {
    GenericTypeIndicator<Map<String, Friends>> t = new GenericTypeIndicator<Map<String, Friends>>() {};
    Map<String, Friends> map = dataSnapshot.getValue(t);

    // get the values from map.values();

Ou plus simple :

public void onDataChange(DataSnapshot dataSnapshot) {
    List<Friends> list = new ArrayList<Friends>();
    for (DataSnapshot child: dataSnapshot.getChildren()) {
        list.add(child.getValue(Friends.class));
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X