Вложенный класс для базы данных с вложенными данными - PullRequest
0 голосов
/ 26 апреля 2018

Допустим, я пишу класс для этих данных:

data in firebase

    reliclistener = mydb.child("relics").addValueEventListener(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {


                for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
                    Log.d("inside",childSnapshot.getValue().toString());


                    relics.put(childSnapshot.getKey(), childSnapshot.getValue(Relic.class));
                    Log.d("insiderelic",relics.get(childSnapshot.getKey()).getDrop().getName()); //not workin
                }
    }
});

Существует карта реликвий, принимающая объекты класса реликтов.

childSnapshot.getKey()).getDrop().getName() is null

Это класс Relic:

public class Relic {
  public Double latitude;
  public Double longitude;
  public Drop mydrop;

  public Relic() {}

  public Double getLatitude() {
    return latitude;
  }
  public Double getLongitude() {
    return longitude;
  }

  public Drop getDrop() {
    return mydrop;
  }

  public static class Drop {

    String name;
    int count;

    Drop() {

    } 

    public String getName() {
      return name;
    }
    public int getCount() {
      return count;
    }
  }
}

Результат Log.d внутри:

{latitude = 0, longitude = 0, drop = {name= test, count = 1}}

{широта = 40.8923772, долгота = 29.3805392, drop = {name = qwew, count = 20}}

Другой вопрос: как мне поступить, если данныеструктурированный как:

drop
   0
    name:test
    count:3
   1
    name:somethng
    count:4

1 Ответ

0 голосов
/ 26 апреля 2018

Переопределите свой класс реликвии следующим образом:

public class Relic {
    private Double latitude;
    private Double longitude;
    private Drop drop;

    public Double getLatitude() {
        return latitude;
    }

    public void setLatitude(Double latitude) {
        this.latitude = latitude;
    }

    public Double getLongitude() {
        return longitude;
    }

    public void setLongitude(Double longitude) {
        this.longitude = longitude;
    }

    public Drop getDrop() {
        return drop;
    }

    public void setDrop(Drop drop) {
        this.drop = drop;
    }
}

И ваш класс падения:

public class Drop {

    private String name;
    private int count;

    public String getName() {
        return name;
    }

    public int getCount() {
        return count;
    }

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

    public void setCount(int count) {
        this.count = count;
    }
}

Теперь вы можете сделать:

 for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
             Relic relic = childSnapshot.getValue(Relic.class);

  }

Если хотитечтобы получить список выпадений (второй вопрос), просто определите свой реликтовый класс следующим образом:

public class Relic {
    private List<Drop> drop;
   ...
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...