Ich verwende Firebase in Java. Der folgende einfache Code hat immer gut funktioniert, wenn der Benutzer Informationen aktualisiert werden mußten:FirebaseException: Fehler beim Analysieren des Knotens mit Klasse in NodeUtilities.NodeFromJSON
final FirebaseBean_User userObject = new FirebaseBean_User(uuid, name, timestamp, points, gamesPlayed, gamesWon);
mFirebaseUser.setValue(userObject, System.currentTimeMillis());
ich verwenden, um den aktuellen Zeitstempel als den Wert Priorität, so dass ich eine Liste aller Benutzer erhalten kann, die vor kurzem online waren.
Wenn Benutzer jedoch offline gehen, möchte ich sie als offline markieren. Also fügte ich noch eine einfache Zeile in der Mitte hinzu:
final FirebaseBean_User userObject = new FirebaseBean_User(uuid, name, timestamp, points, gamesPlayed, gamesWon);
mFirebaseUser.onDisconnect().setValue(userObject, USER_PRIORITY_OFFLINE); // best practice: always call onDisconnect() before the actual setValue() operation to prevent ghost data
mFirebaseUser.setValue(userObject, System.currentTimeMillis());
Und plötzlich hörte dieses Stück Code auf zu arbeiten. Ich erhalte die folgende Ausnahme, wo die Verursachung Linie (465) die neuen in der Mitte ist:
FATAL EXCEPTION: main
com.firebase.client.FirebaseException: Failed to parse node with class class com.my.package.MultiplayerService$FirebaseBean_User
at com.firebase.client.snapshot.NodeUtilities.NodeFromJSON(NodeUtilities.java:130)
at com.firebase.client.OnDisconnect.setValue(OnDisconnect.java:81)
at com.my.package.MultiplayerService.updateUserInformation(MultiplayerService.java:465)
at com.my.package.MultiplayerService.access$4(MultiplayerService.java:461)
at com.my.package.MultiplayerService$1.onDataChange(MultiplayerService.java:83)
at com.firebase.client.core.ValueListenerContainer$1.run(ValueListenerContainer.java:50)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4514)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
Warum das passiert? Mache ich etwas falsch? Ich meine, setValue()
hat vorher gut funktioniert, jetzt ist die einzige Änderung, dass ich es auf onDisconnect()
auch nenne und es funktioniert nicht mehr.
(Es spielt keine Rolle, ob es Daten wurden an diesem Referenzpunkt vor oder nicht.)
Hier ist die Klasse, die als Referenz verwendet wird:
private static class FirebaseBean_User {
private String uuid;
private String name;
private int lastlogin;
private double points;
private int gamesplayed;
private int gameswon;
private FirebaseBean_User() { }
public FirebaseBean_User(String uuid, String name, int lastlogin, double points, int gamesplayed, int gameswon) {
this.uuid = uuid;
this.name = name;
this.lastlogin = lastlogin;
this.points = points;
this.gamesplayed = gamesplayed;
this.gameswon = gameswon;
}
public String getUuid() {
return uuid;
}
public String getName() {
return name;
}
public int getLastlogin() {
return lastlogin;
}
public double getPoints() {
return points;
}
public int getGamesplayed() {
return gamesplayed;
}
public int getGameswon() {
return gameswon;
}
@Override
public boolean equals(Object o) {
return (o instanceof FirebaseBean_User && ((FirebaseBean_User) o).getUuid() == this.uuid);
}
}
Es scheint, dass onDisconnect das Objekt FirebaseBean_User (userObject) nicht in oder aus einer JSON-Zeichenfolge analysieren kann. –
Ja, das wird offensichtlich durch die 'Exception', die geworfen wird (_into_ JSON), aber die Frage ist _why_ genau das ist so. Wie Sie sehen können, schreiben 'onDisconnect(). SetValue()' und 'setValue()' dasselbe Objekt in den Referenzknoten, aber mit 'setValue()' funktioniert es und mit 'onDisconnect(). SetValue() '(nur 1 Zeile vorher), es funktioniert nicht. Warum? – caw
Was ist der Wert von USER_PRIORITY_OFFLINE? Ich schätze, die Engine ist nicht in der Lage, das in gültiges JSON zu analysieren. – Anant