Tôi đang sử dụng Firebase
để lưu trữ dữ liệu trên dự án Android
và sử dụng Firebase Java API
để xử lý dữ liệu. Tôi không chắc chắn rằng tôi đang làm nó hiệu quả nhất có thể, mặc dù, và tôi muốn một số lời khuyên về thực hành tốt nhất để lấy và định dạng dữ liệu. kho Firebase
của tôi trông giống như thế này ....Cách tốt nhất để truy xuất/định dạng dữ liệu bằng API Java 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) - ...
Vì vậy, ví dụ ở đây tôi đang cố gắng để có được tất cả dữ liệu ra khỏi một cuộc thăm dò để liệt kê tên bình chọn, đó là tên cuộc bầu cử, và tên thí sinh và số phiếu bầu cho mỗi cuộc bầu cử. Tôi nhận được các cuộc thăm dò cấp DataSnapshot
trong OnCreate()
chức năng hoạt động chính của tôi như thế này ...
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);
}
}
}
});
}
Sau đó, tôi tiến hành đọc các phần riêng lẻ của dữ liệu tôi cần bằng cách liên tục gọi getValue()
trên DataSnapshots
, và kiểm tra các phím của kết quả 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");
}
}
};
}
}
Điều này có vẻ như một cách khá tẻ nhạt để xem chi tiết cấu trúc dữ liệu và tôi tự hỏi liệu có cách nào hay hơn không.
Tôi đã nhìn thấy phương pháp getValue(java.lang.Class<T> valueType)
trong tài liệu, nhưng không thể làm cho nó hoạt động trong trường hợp của tôi, vì tôi đang làm việc với các đối tượng sáng tác chứ không chỉ các vùng chứa cho các kiểu nguyên thủy. Làm thế nào để chức năng biết những gì Firebase
dữ liệu để gán cho các biến thành viên của một đối tượng mô hình? Có phải nó khớp với các tên khóa Firebase
với các biến thành viên và do đó các biến này phải giống hệt nhau, với độ nhạy trường hợp không? Làm thế nào để đối phó với Firebase
các tên khóa được tạo ra như được tạo ra khi đẩy đến một số List
? Làm thế nào để bạn xây dựng các đối tượng mô hình cho các đối tượng sáng tác?
mát nhờ Greg. Hãy cho tôi một vài giờ để về nhà và cố gắng thực hiện theo cách này. Cảm ơn! – MassStrike
Ok tuyệt, đây là tất cả những gì tôi cần để bắt đầu. Cảm ơn Greg, đánh giá cao sự hỗ trợ nhanh chóng. – MassStrike
Xin lỗi để đưa ra một thread cũ, nhưng, tôi đang sử dụng GeoFire cùng với Firebase và lớp Geolocation không cung cấp một constructor mặc định. Vì vậy, làm thế nào tôi nên tiến hành deserialize loại này của lớp học? Có nhà máy deserializer nào được nhúng không? Cảm ơn ! – Leonardo