2015-10-08 2 views
4

Взятые из Firebase Например, если у меня есть Динозавры факты структуры данных, как это:Как представлять вложенные данные в Firebase класса

{ 
    "lambeosaurus": { 
    "name": "lamby", 
    "work": "eat", 
    "dimensions": { 
     "height" : 2.1, 
     "length" : 12.5, 
     "weight": 5000 
    } 
    }, 
    "stegosaurus": { 
    "name": "stego", 
    "work": "play", 
    "dimensions": { 
     "height" : 4, 
     "length" : 9, 
     "weight" : 2500 
    } 
    } 
} 

Как я могу представлять эту структуру в классе Android для Firebase, чтобы отливать из DataSnapshot.getValue(DinosaurFacts.class)?

имя и работа представлены как строки, но как представить коллекцию «размеры» в классе?

Также как я могу получить доступ к данным от DataSnapshot о высоте & вес?

EDIT я могу получить отдельные элементы пробегаем по снимку, но я пытаюсь найти способ представления данных в структуре класса.

for(DataSnapshot child : dataSnapshot.getChildren()) { 

       Log.d("hz-key:", child.getKey().toString()); 
       Log.d("hz-val:", child.getValue().toString()); 
      } 
+0

Вы еще что-нибудь попробовали? –

+0

yes Я могу получить отдельные данные с помощью dataSnapshot.getChildren -> получить значение и ключ. Но мне интересно, как напрямую представлять вложенную структуру в моем классе java. Просто обновил вопрос. – srinivas

ответ

11

JavaBean класс для представления такой структуры:

public static class DinosaurFacts { 
    String name; 
    String work; 
    Dimensions dimensions; 

    public String getName() { 
     return name; 
    } 

    public String getWork() { 
     return work; 
    } 

    public Dimensions getDimensions() { 
     return dimensions; 
    } 

    public class Dimensions { 
     double height; 
     long weight; 
     double length; 

     public double getHeight() { 
      return height; 
     } 

     public long getWeight() { 
      return weight; 
     } 

     public double getLength() { 
      return length; 
     } 
    } 
} 

Тогда вы можете прочитать Дино с:

DinosaurFacts dino = dinoSnapshot.getValue(DinosaurFacts.class); 

И доступ размеры с, например:

dino.getDimensions().getWeight(); 
+0

Отлично! Благодарю. Да, с помощью отдельных классов я могу полностью инкапсулировать все свои пользовательские структуры. – srinivas

+1

Что делать, если одно из моих дочерних свойств представляет собой массив целых чисел?Я бы использовал массив List для извлечения данных? Я знаю, что firebase хранит данные массива как объект, но как я могу преобразовать его в свойство java? – kreshendo

+1

Обратите внимание, что подкласс должен быть объявлен static, если он имеет конструктор, иначе он приведет к «... отсутствует конструктор без аргументов» (http://stackoverflow.com/a/39087010/1004331) – astromme

0

Я последовал за Фран Ответ K, но я получил сообщение об ошибке, которая говорит:

подкласс нуждается в пустой конструктор

хотя я был один.

Решение:

Создать новый (внешний) класс для него.


Вот мой пример:

первого класса:

public class Event { 

    private String name; 
    private Place place; 
} 

Подкатегория:

public class Place { 

    private String name; 
    private Location location; 

} 

Sub Подкласс:

public class Location { 

    private String city; 
    private Double longitude, latitude; 

} 
+0

Да, вам нужно иметь пустой конструктор для работы класса данных firebase. Также класс должен быть сериализуемым. – srinivas

Смежные вопросы