我在项目中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
我在这样的主要活动功能期间获得了 POLLS 级别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
生成的键名,如推送到 a 时生成的键名List
?如何为组合对象构造模型对象?