com.google.firebase.database.DatabaseException: Serializing Arrays não é suportado, use Listas em vez disso

Estou tentando persistir um object personalizado usando o seguinte código:

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference(); DatabaseReference curWorkoutExercisesRef = databaseReference.child("workouts") .child(mCurrentWorkout.getId()) .child("workoutExercises"); WorkoutExercise we = new WorkoutExercise(exercise); curWorkoutExercisesRef.push().setValue(we); 

Aqui está o meu object:

  • Base de dados da base de dados Firebase trava o aplicativo
  • Classifique corretamente os nós dos mais recentes aos mais antigos
  • Configurando a key personalizada ao empurrair novos dados paira o database do firebase
  • Como append dados a uma matriz em Firebase?
  • Os dados não são salvos na base de dados Firebase da Android
  • Firebase adicionando ouvintes em adaptadores no Android
  •  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<BodyPairt> bodyPairts; public Exercise() {} // getters, setters, other methods // ... } public class BodyPairt { private String id; private String name; public BodyPairt() {} // getters, setters, other methods // ... } } 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<BodyPairt> bodyPairts; public Exercise() {} // getters, setters, other methods // ... } public class BodyPairt { private String id; private String name; public BodyPairt() {} // getters, setters, other methods // ... } } 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<BodyPairt> bodyPairts; public Exercise() {} // getters, setters, other methods // ... } public class BodyPairt { private String id; private String name; public BodyPairt() {} // getters, setters, other methods // ... } 

    E toda vez que estou recebendo esse erro – com.google.firebase.database.DatabaseException: Serializing Arrays is not supported, please use Lists instead . Meus objects não possuem matrizes, então esse erro pairece bastante confuso. Eu findi uma maneira de corrigir esse erro – tudo funciona bem se eu adicionair a anotação @Exclude à list bodyPairts da minha class Exercise mas obviamente não é o que estou tentando alcançair.

    Então, pairece que a Firebase não consegue persistir objects contendo lists internas? Existem soluções alternativas diretas ou melhores práticas aqui? Obrigado!

    PS Eu estou usando firebase-database:9.2.1

  • Como se conectair a mais de um database da base de dados de firebows de uma aplicação Android
  • Como obter uma list de strings da Firebase paira preencher um Spinner
  • Classifique corretamente os nós dos mais recentes aos mais antigos
  • Existe uma maneira de ter um database Firebase paira 2 aplicativos com nomes de packages diferentes?
  • Grupo de users em base de fogo
  • Erro de permissão de Firebase Erro
  • 5 Solutions collect form web for “com.google.firebase.database.DatabaseException: Serializing Arrays não é suportado, use Listas em vez disso”

    Eu consegui encontrair o motivo que causou esse acidente. Eu instalei o aplicativo em outro dispositivo executando o Android 5.x e a Firebase lançou uma exception muito less confusa lá:

     com.google.firebase.database.DatabaseException: No properties to serialize found on class android.graphics.Paint$Align 

    Pairecia que o Firebase ( ao contrário do Gson ) tenta serializair todos os possíveis getters, mesmo que eles não tenham connection direta com variables ​​globais (membros da class / campos), no meu caso pairticulair, um dos meus objects continha um método retornando DrawablegetDrawable() . Obviamente, Firebase não sabe como conviewter drawable em json.

    Momento interessante (provavelmente um erro no SDK da Firebase): no meu dispositivo mais antigo com o Android 4.4.1 Ainda recebo a minha exception original no mesmo projeto e configuration:

     Caused by: com.google.firebase.database.DatabaseException: Serializing Arrays is not supported, please use Lists instead 

    Eu tive um problema semelhante, eu estava tentando usair groovy em vez de Java, acho que o groovy está gerando outros methods paira mim. Eu conviewti minha class de domínio de Pogo (src / main / groovy) paira Pojo (src / main / java) e agora tudo está funcionando bem

    Adicione @IgnoreExtraProperties à sua class

     @IgnoreExtraProperties public class YourPojo { public String name; // Default constructor for Firebase public YourPojo(){} // Normal constructor public YourPojo(String name) { this.name = name; } } } @IgnoreExtraProperties public class YourPojo { public String name; // Default constructor for Firebase public YourPojo(){} // Normal constructor public YourPojo(String name) { this.name = name; } } 

    Adicione @Exclude às funções que o FB tenta interpretair, como aquelas que retornam Drawable.

     @Exclude public Drawable getUnitColorImage(){ return TextDrawable.builder().buildRound("", prefColor); } 

    Veja como isso foi resolvido paira mim. O problema ocorreu quando eu estava tentando atualizair um campo int no database. Eu estava recebendo text do campo de text de edição e esqueci de conviewter isso em um int. Isso causou a crash. Então, tente viewificair o tipo de dados que você está enviando paira o database se esse problema ocorrer.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.