TechBee
TechBee

Reputation: 1941

Firebase database object mapping

I am getting following error while reading back from Google Firebase.

com.google.firebase.database.DatabaseException: Expected a Map while deserializing, but got a class java.lang.Long

I have a Model class as under namely FBOrganisation.

    public class FBOrganisation {

    private String name;
    private String address;
    private String admin_email;
    private String subscription_type;
    private Boolean is_active;
    private String state;
    private String pin_code;
    private String id;
    private Map<String, String> created_on;

    public String getAdmin_email() {
        return admin_email;
    }

    public void setAdmin_email(String admin_email) {
        this.admin_email = admin_email;
    }

    public String getSubscription_type() {
        return subscription_type;
    }

    public void setSubscription_type(String subscription_type) {
        this.subscription_type = subscription_type;
    }

    public Boolean getIs_active() {
        return is_active;
    }

    public void setIs_active(Boolean is_active) {
        this.is_active = is_active;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getPin_code() {
        return pin_code;
    }

    public void setPin_code(String pin_code) {
        this.pin_code = pin_code;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Map<String, String> getCreated_on() {
        return created_on;
    }

    public void setCreated_on(Map<String, String> created_on) {
        this.created_on = created_on;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Exclude
    public Map<String, Object> toMap() {
        HashMap<String, Object> result = new HashMap<>();
        result.put("name", name);
        result.put("address", address);
        result.put("admin_email", admin_email);
        result.put("subscription_type", subscription_type);
        result.put("is_active", is_active);
        result.put("state", state);
        result.put("pin_code", pin_code);
        result.put("id", id);
        result.put("created_on", created_on);
        return  result;
    }
}

I am pushing this class in firebase with

organisations.push().setValue(fbOrganisation, new DatabaseReference.CompletionListener() {
        @Override
        public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
            if(databaseError == null){
                databaseReference.child("id").setValue(databaseReference.getKey());

            }
        }
    });

While I am trying to read back the data with following code I am getting the above mentioned error.

DatabaseReference organisations = mDatabase.getReference("organisations");
        organisations.orderByChild("id").equalTo(orgId).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if (dataSnapshot.exists()) {
                    for(DataSnapshot singleSnapshot : dataSnapshot.getChildren()){
                        FBOrganisation anOrganisation = singleSnapshot.getValue(FBOrganisation.class);
                        Log.d("TAG15",anOrganisation.getName());
                        Log.d("TAG15",anOrganisation.getId());
                    }                
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.e("TAG15", "onCancelled", databaseError.toException());
            }
        });

Here is the snapshot of Firebase database.

enter image description here

Upvotes: 1

Views: 1780

Answers (1)

John O&#39;Reilly
John O&#39;Reilly

Reputation: 10330

You have private Map<String, String> created_on; in your FBOrganisation POJO but created_on contains a long value in db

Upvotes: 2

Related Questions