Лучший способ получить / отформатировать данные, используя Firebase Java API
я используюFirebase
для хранения данных наAndroid
проект, и используяFirebase Java API
иметь дело с данными. Я не уверен, что делаю это настолько эффективно, насколько это возможно, и мне хотелось бы получить несколько советов о передовых методах извлечения и форматирования данных. мойFirebase
репозиторий выглядит примерно так ....
-POLLS
NUMPOLLS - 5
(pollskey) - NAME - Poll1
NUMELECTIONS - 2
ELECTIONS
(electionskey) - NAME - Election1
NUMNOMINATIONS - 2
NUMVOTERS - 2
NUMBERTOELECT - 1
VOTERS - (votesrkey) - NAME - Charles
NUMBER - (678) 333-4444
.
.
.
(voterskey) - ...
NOMINATIONS - (nominationskey) - NAME - Richard Nixon
NUMBEROFVOTES - 2
.
.
.
(nominationskey) - ...
.
.
.
(electionskey) - ...
.
.
.
(pollskey) - ...
Так, например, здесь я пытаюсь получить все данные из опроса, чтобы вывести список опроса, его имена и имена кандидатов, а также количество голосов для каждых выборов. Я получаю уровень ОПРОСОВDataSnapshot
вовремяOnCreate()
функция моей основной деятельности, как это ...
private static final Firebase polls = pollsFirebase.child("Polls");
protected void onCreate(Bundle savedInstanceState) {
polls.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot child : snapshot.getChildren()) {
if (!child.getName().equals("NumPolls")) {
createPollTableAndHeaders(child);
}
}
}
});
}
Затем я продолжаю считывать отдельные части данных, которые мне нужны, последовательно вызываяgetValue()
наDataSnapshots
и проверка ключей полученногоHashMaps
...
private void createPollTableAndHeaders(DataSnapshot poll) {
String pollName = "";
int numPolls;
Object p = poll.getValue();
if (p instanceof HashMap) {
HashMap pollHash = (HashMap) p;
if (pollHash.containsKey("Name")) {
pollName = (String) pollHash.get("Name");
}
if (pollHash.containsKey("Elections")) {
HashMap election = (HashMap) pollHash.get("Elections");
Iterator electionIterator = election.values().iterator();
while (electionIterator.hasNext()) {
Object electionObj = electionIterator.next();
if (electionObj instanceof HashMap) {
HashMap electionHash = (HashMap) electionObj;
if (electionHash.containsKey("Name")) {
String electionName = (String) electionHash.get("Name");
}
}
};
}
}
Это кажется довольно утомительным способом углубиться в структуру данных, и мне интересно, есть ли лучший способ.
Я виделgetValue(java.lang.Class<T> valueType)
метод в документации, но я не смог заставить его работать в моем случае, так как я работаю с составными объектами, а не только с контейнерами для примитивных типов. Как функция узнает, чтоFirebase
данные для присваивания, какие переменные-члены объекта модели? Это соответствуетFirebase
имена ключей с переменными-членами, и поэтому должны ли они быть одинаковыми с учетом регистра? Как это будет иметь дело сFirebase
сгенерированные имена ключей, как создаются при нажатии наList
? Как построить модель объектов для составных объектов?