2016-06-22 8 views
3

Ich versuche, eine Anfrage an meine App mit Firebase zu stellen. Ich kann die Daten speichern, aber wenn ich versuche, sie abzurufen, bekomme ich diesen FehlerIgnoriere, was nicht in POJO ist

06-20 12:07:15.151 28158-28158/sgk.com.br.sgk E/AndroidRuntime: FATAL EXCEPTION: main 
Process: sgk.com.br.sgk, PID: 28158 
com.firebase.client.FirebaseException: Failed to bounce to type 
    at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183) 
    at sgk.com.br.sgk.Activity.GreatTrainsActivity$1.onDataChange(GreatTrainsActivity.java:65) 
    at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45) 
    at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45) 
    at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38) 
    at android.os.Handler.handleCallback(Handler.java:746) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5443) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "vdsrXOFXRZbAfmoEQ3WEVB1GDDa2" (class sgk.com.br.sgk.Others.Train), not marked as ignorable (2 known properties: , "description", "local"]) 
    at [Source: [email protected]; line: 1, column: 34] (through reference chain: sgk.com.br.sgk.Others.Train["vdsrXOFXRZbAfmoEQ3WEVB1GDDa2"]) 
    at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:555) 
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:708) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1160) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:315) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121) 
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888) 
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034) 
    at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:181) 
    at sgk.com.br.sgk.Activity.GreatTrainsActivity$1.onDataChange(GreatTrainsActivity.java:65)  
    at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45)  
    at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45)  
    at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38)  
    at android.os.Handler.handleCallback(Handler.java:746)  
    at android.os.Handler.dispatchMessage(Handler.java:95)  
    at android.os.Looper.loop(Looper.java:148)  
    at android.app.ActivityThread.main(ActivityThread.java:5443)  
    at java.lang.reflect.Method.invoke(Native Method) 

ich schon Figur, was das Problem ist.

Meine Datenbank war wie die

{ 
    "Train" : { 
    "description" : "dbdjem", 
    "local" : "shsusn" 
    }, 
    "users" : { 
    "f01dfa18-54ac-41ea-97ff-97d0e40b872b" : { 
     "email" : "[email protected]" 
    }, 
    "vdsrXOFXRZbAfmoEQ3WEVB1GDDa2" : { 
     "email" : "[email protected]" 
    } 
    } 
} 

Wenn ich alles löschen sonst außer dem, was in der POJO ist, ist es sehr gut funktioniert.

Also, das ist meine Frage: Gibt es eine Möglichkeit, alles andere in der Datenbank zu ignorieren, außer was es auf meinem POJO gibt?

EDIT

Hier ist meine POJO

public class Train { 

    private String local; 
    private String description; 
    public String data; 

    public Train() { 
    } 

    public String getLocal() { 
     return local; 
    } 

    public void setLocal(String local) { 
     this.local = local; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    @Exclude 
    public String getData(){return data;} 
} 

Und hier der Aufruf

Firebase ref = new Firebase(Constants.FIREBASE_URL); 
ref.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     for (DataSnapshot postSnapshot: snapshot.getChildren()) { 
      //Getting the data from snapshot 
      Train train = postSnapshot.getValue(Train.class); 
      //Adding it to a string 
      String string = "Local: " + train.getLocal() + "\nDescrição: " + train.getDescription() + "\n\n"; 
      //Displaying it on textview 
      textViewPersons.setText(string); 
     } 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 
     System.out.println("The read failed: " + firebaseError.getMessage()); 
    } 
}); 
+0

Können Sie den Code zeigen, dass die Daten liest (dh etwas mit einem Aufruf an 'DataSnapshot.getValue()') und Ihre POJO? –

+0

Frank, ich habe mit dem, was du verlangst, editiert. Danke –

+0

@FrankvanPuffelen Sorry, scheint, dass wir retten fast zusammen togheter. (dale grêmio @ LeonardoAssunção): P – adolfosrs

Antwort

4

Sie eine ChildEventListener, um die Wurzel Ihrer Datenbank anzubringen. Die Kinder unter dieser Wurzel sind:

Train 
users 

Keines dieser Anfälle in der Java Train Klasse, die Sie erstellt haben.

Die Lösung ist es, die Zuhörer auf den Trains Knoten mit anbringt:

Firebase ref = new Firebase(Constants.FIREBASE_URL); 
ref.child("Trains").addValueEventListener(new ValueEventListener() { 
    ... 
+0

Danke Frank! Hat sehr gut funktioniert –