user6750923
user6750923

Reputation: 479

Get values from the Datasnapshot object with keys in Firebase Android

I want to print some data after getting from the DataSnapShot object. For printing it, I am doing in this way;

private void getUpdates(DataSnapshot DS){
    for(DataSnapshot mydata:DS.getChildren()){
     Log.i("", String.valueOf(data));
    }
}

and making firebase instance as;

       FirebaseDatabase database = FirebaseDatabase.getInstance();
        myRef = database.getReference("myDB");
        myRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                getUpdates(dataSnapshot);
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                getUpdates(dataSnapshot);
            }

Printing as:

 DataSnapshot { key = areaName, value = myName1}
    DataSnapshot { key = decs, value =  desc1}
    DataSnapshot { key = areaName, value = myName2 }
    DataSnapshot { key = desc, value = desc2 }

But I want to get only desc values.

My Model class is:

public class Singleton {
    private String areaName;
    private String desc;


    public Singleton(String areaName, String desc) {
        this.areaName = areaName;
        this.desc = desc;
    }

    public String getAreaName() {
        return areaName;
    }

    public void setAreaName(String areaName) {
        this.areaName = areaName;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }



}

I tried in this way;

String decsrip= (String) mydata.child("desc").getValue();
Log.i("", decsrip);

But it is printing

null

Then I tried as

Map<String, Object> map = (Map<String, Object>) mydata.getValue();
String descrip = (String) map.get("desc");
Log.i("",descrip );

The application crashed by saying

java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map

Where the data is? Can I get the value of desc only?

Upvotes: 0

Views: 8151

Answers (1)

Adem İlhan
Adem İlhan

Reputation: 1500

Only thing you need to do is that

FirebaseDatabase database = FirebaseDatabase.getInstance();
myRef = database.getReference("myDB");
myRef.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        Singleton data = dataSnapshot.getValue(Singleton.class);
        Log.i("", String.valueOf(data.getDesc()));
    }

    ...
}

You also need to add an empty constructor to your Singleton model.

public class Singleton {
  private String areaName;
  private String desc;

  public Singleton() {
  }

  public Singleton(String areaName, String desc) {
    this.areaName = areaName;
    this.desc = desc;
  }

  public String getAreaName() {
    return areaName;
  }

  public void setAreaName(String areaName) {
    this.areaName = areaName;
  }

  public String getDesc() {
    return desc;
  }

  public void setDesc(String desc) {
    this.desc = desc;
  }
}

Upvotes: 3

Related Questions