2016-09-19 8 views
1

Ich versuche, die in meiner Firebase-Datenbank gespeicherten Werte zu lesen. Dies ist, wie die Datenbank wie folgt aussieht:UnrecognizedPropertyException beim Lesen von Daten aus Firebase

URL: https://xxxx.firebaseio.com/Cohesion/Passes/Away/Arsenal

Firebase database

nun von Android Seite, das ist, wie ich versuche, die Daten abzurufen:

Firebase mRef = new Firebase("https://xxxx.firebaseio.com/Cohesion/Passes/Away/Arsenal"); 

    mRef.addValueEventListener(new ValueEventListener() 
    { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) 
     { 
      Arsenal vals = dataSnapshot.getValue(Arsenal.class); 
      Log.e("retValue",""+vals); 

     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) 
     { 
      Log.e("REAL_ERROR",""+firebaseError); 

     } 
    }); 

Arsenal. Klasse

public class Arsenal { 

    private int Cross; 
    private int LongBall; 
    private int ShortPass; 
    private int ThroughBall; 

    public Arsenal() 
    { 

    } 

    public Arsenal(int Cross,int LongBall,int ShortPass,int ThroughBall) 
    { 
     this.Cross = Cross; 
     this.LongBall = LongBall; 
     this.ShortPass = ShortPass; 
     this.ThroughBall = ThroughBall; 
    } 
    public int getCross() { 
     return Cross; 
    } 


    public int getLongBall() { 
     return LongBall; 
    } 


    public int getShortPass() { 
     return ShortPass; 
    } 


    public int getThroughBall() { 
     return ThroughBall; 
    } 


} 

Ich habe die Rules in der Konsole auf true gesetzt, so dass öffentlich lesend und schreibend zugegriffen werden kann und ich daher ohne Authentifizierung darauf zugreife. Hier

ist die Logcat:

09-19 12: 14: 13.585 bis 13.585 51,032/com.ihrd.myapplication E/Android Runtime: fatal EXCEPTION: main Prozess: com.ihrd.myapplication, PID: 13585 Thema: Themen: {} com.firebase.client.FirebaseException: Fehler abprallen bei com.firebase.client.DataSnapshot.getValue (DataSnapshot.java:185) bei com.ihrd.myapplication eingeben .MainActivity $ 1.onDataChange (MainActivity.java:28) bei com.firebase.client.core.ValueEventRegistration.fireEvent (ValueEventRegistration.java:53) bei com.firebase.client.core.view.DataEvent.fire (DataEvent.java:45) bei com.firebase. client.core.view.EventRaiser $ 1.run (EventRaiser.java:38) bei android.os.Handler.handleCallback (Handler.java:739) bei android.os.Handler.dispatchMessage (Handler.java:95) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread.java:5461) bei java.lang.reflect.Method.invoke (native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) Verursacht durch: com.fasterxml .jackson.databind.exc.UnrecognizedPropertyException: Nicht erkanntes Feld "Cross" (Klasse com.ihrd.myapplication.Arsenal), nicht als ignorierbar gekennzeichnet (0 bekannte Eigenschaften:]) at [Quelle: [email protected] ; Linie: 1, Säule: 12] (durch die Referenzkette: com.ihrd.myapplication.Arsenal [ "Cross"]) bei com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty (DeserializationContext.java:555) bei com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty (StdDeserializer.java:708) bei com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty (BeanDeserializerBase.java:1160) bei com .fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject (BeanDeserializer.Java: 315) bei com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize (BeanDeserializer.java:121) bei com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose (ObjectMapper.java:2888) bei com.fasterxml.jackson.databind.ObjectMapper.readValue (ObjectMapper.java:2034) bei com.firebase.client.DataSnapshot.getValue (DataSnapshot.java:183) bei com.ihrd.myapplication.MainActivity $ 1.onDataChange (MainActivity.java:28) um com.firebase.client.core.ValueEventRegistration.fireEvent (ValueEventRegistration.java:53) bei com.firebase.client.core.view.DataEvent.fire (DataEvent.java:45) um com.firebase.client.core.view.EventRaiser $ 1.run (EventRaiser.java:38) bei Android. os.Handler.handleCallback (Handler.java:739) bei android.os.Handler.dispatchMessage (Handler.java:95) bei android.os.Looper.loop (Looper.java:148) bei android.app. ActivityThread.main (ActivityThread.java:5461) bei java.lang.reflect.Method.invoke (Mutter Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) bei Koma ndroid.internal.os.ZygoteInit.main (ZygoteInit.java:616)

Was verursacht das möglicherweise? Und wie zu reparieren? freundlich helfen.

+0

prüfen http://stackoverflow.com/questions/32108969/why-do-i-get-failed-to-bounce-to-type-when-i-turn-json-from-firebase-into-java Wahrscheinlich die beste Erklärung Ich habe das gesehen. – RamithDR

Antwort

1

Wenn eine Klasse mit Getter und Setter gefunden wird, verwendet Firebase eine JavaBean-Namenskonvention, um die zugrunde liegenden JSON-Eigenschaftsnamen zu ermitteln.

Das bedeutet, dass

public class Arsenal { 
    private int Cross; 

    public int getCross() { 
     return Cross; 
    } 
} 

zu diesem JSON Verschiebt:

cross: 19 

Sie werden sehen, dass der Fall anders.Soweit ich sehen kann, Sie ein paar Optionen:

1 - den Fall des Immobilien JSON ändern

Wenn Sie die Eigenschaftsnamen in JOSN mit einem Kleinbuchstaben beginnen, die Dinge arbeiten mit Ihnen aktuellen Code :

cross: 19 

2 - public Felder anstelle von Getter/Setter

Wenn Sie nur öffentliche Felder haben, wird Firebase den genauen Namen dieser Felder für die JSON-Mapping verwenden:

public class Arsenal { 
    public int Cross; 
} 

3 - die Klasse mit Anmerkungen versehen die korrekte Zuordnung zu bekommen

Die endgültige Lösung ist eine Anmerkung für die Klasse zu setzen, um die entsprechenden Firebase JSON Eigenschaft finden zu helfen.

Da Sie die Firebase 2.x SDK verwenden, die Anmerkung ist JsonProperty von Jackson:

public class Arsenal { 
    private int Cross; 

    @JsonProperty("Cross") 
    public int getCross() { 
     return Cross; 
    } 
} 

In Firebase 3.x, ist die entsprechende Anmerkung PropertyName:

public class Arsenal { 
    private int Cross; 

    @PropertyName("Cross") 
    public int getCross() { 
     return Cross; 
    } 
} 
-1

Ich würde entweder hinzufügen Setter oder Entfernen der Getter und machen die Mitglieder öffentlich, um Ihre Klasse serialisieren mit Jackson.

0

Wenn Sie Wert von LongBall Code wie folgt schreiben möchten.

Verwandte Themen