2017-05-07 3 views
0

Ich habe ein Modell, das eine Liste enthält.Absturz auf Deserialisierung Liste von Firebase

class Group { 
    List<String> members; 
    // Other fields 
} 

Ich bin Einfügen das gesamte Modell in Firebase databaseRef.setValue(group) verwenden. Jetzt wird es korrekt in Firebase eingefügt, aber das Problem tritt auf, wenn ich versuche, einen neuen Wert im Feld members hinzuzufügen.

Ich verwende membersRef.push().setValue("[email protected]"), um ein neues Feld in der Mitgliederliste auf Firebase hinzuzufügen.

Wenn Group Objekt wurde zunächst erstellt Firebase verwendet "0", "1", etc als Schlüssel, aber wenn ich() drücken, erstellt es eine eindeutige Zeichenfolge als Schlüssel.

Ich schaffe das Java-Objekt zurück mit diesem Code:

groupReference.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     Group group = dataSnapshot.getValue(Group.class); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 

Jetzt ist das Problem bei der Erstellung des Group Klasse zurück von Firebase versucht, die members Feld in einem List zu konvertieren, weil sie Schlüsselstart ist aus 0 aber nach einiger Iteration gibt es einen String Schlüssel (etwas wie "-KjTzYGRDZN99rBZfPDF"), also stürzt es ab, es in List zu konvertieren.

My Firebase Objekt sieht wie folgt aus:

Group 
|-----members 
     |----0: "[email protected]" 
     |-----KjTzYGRDZN99rBZfPDF: "[email protected]" 

Ich bin verwirrt, wie kann ich dieses Problem lösen. Wie kann ich der Firebase mitteilen, dass sie einen eindeutigen Schlüssel für List anstelle von 0, 1, 2 usw. verwenden soll?

Antwort

0

Verwenden Sie eine HashMap anstelle von List. Wenn Sie das Objekt group auf dem Firebase speichern, stellen Sie sicher, dass hashmap leer ist. Jetzt können Sie auf die membersRef migrieren und alle gewünschten Werte mit einer Schleife mit push() und setValue() im nachfolgenden Code setzen.

Verwandte Themen