Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ignore what is not inside POJO

I'm trying to do some request to my app with Firebase. I can save the data, but when i'm trying retrieving them, I get this error

  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: java.io.StringReader@ab8ad7; 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)

I already figure what the problem is.

My database was like that

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

If I delete everything else besides what is in the POJO, it works very well.

So, explained this, my question is: Is there a way to ignore everything else in the database besides what there's on my POJO?

EDIT

Here is my 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;}
}

And here the call

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());
    }
});
like image 774
Leonardo Assunção Avatar asked Jan 20 '26 10:01

Leonardo Assunção


1 Answers

You're attaching a ChildEventListener to the root of your database. The children under that root are:

Train
users

Neither of these fits in the Java Train class that you've created.

The solution is to attach the listener to the Trains node with:

Firebase ref = new Firebase(Constants.FIREBASE_URL);
ref.child("Trains").addValueEventListener(new ValueEventListener() {
    ...
like image 57
Frank van Puffelen Avatar answered Jan 23 '26 01:01

Frank van Puffelen