9 votes

com.google.firebase.database.DatabaseException : Serializing Arrays n'est pas supporté, veuillez utiliser Lists à la place.

J'essaie de faire persister un objet personnalisé en utilisant le code suivant :

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
DatabaseReference curWorkoutExercisesRef = databaseReference.child("workouts")
            .child(mCurrentWorkout.getId())
            .child("workoutExercises");

WorkoutExercise we = new WorkoutExercise(exercise);
curWorkoutExercisesRef.push().setValue(we);

Voici mon objet :

public class WorkoutExercise {

    private String id;
    private Exercise exercise;

    public WorkoutExercise() {}

    // getters, setters, other methods 
    // ...
}

public class Exercise {

    private String id;
    private String title;

    private List<BodyPart> bodyParts;

    public Exercise() {}

    // getters, setters, other methods 
    // ...
}

public class BodyPart {

    private String id;
    private String name;

    public BodyPart() {}

    // getters, setters, other methods 
    // ...
}

Et à chaque fois, j'obtiens cette erreur - com.google.firebase.database.DatabaseException: Serializing Arrays is not supported, please use Lists instead . Mes objets ne contiennent pas de tableaux et cette erreur est donc assez déroutante. J'ai trouvé un moyen de corriger cette erreur - tout fonctionne bien si j'ajoute la balise @Exclude à l'annotation bodyParts liste de mon Exercise mais ce n'est évidemment pas ce que j'essaie de faire.

Il semble donc que Firebase soit incapable de faire persister les objets contenant des listes internes ? Existe-t-il des solutions de contournement simples ou des meilleures pratiques ? Merci !

P.S. J'utilise firebase-database:9.2.1

0voto

Entreco Points 3950

Ajoutez @IgnoreExtraProperties à votre classe

@IgnoreExtraProperties
public class YourPojo {
    public String name;

    // Default constructor for Firebase
    public YourPojo(){} 

    // Normal constructor
    public YourPojo(String name) {
        this.name = name;   
    }
}

0voto

Vijay Points 413

Voici comment j'ai résolu ce problème. Le problème s'est produit lorsque j'ai essayé de mettre à jour un champ int dans la base de données. Je récupérais du texte dans le champ "edit text" et j'avais oublié de le convertir en "int". C'est ce qui a provoqué l'échec. Essayez donc de vérifier le type de données que vous envoyez à la base de données si ce problème se produit.

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