問題是DataSnapShot
是缺少一個沒有參數構造函數,所以你不能直接像這樣使用它。
改爲使用其他模型類。
像這樣:
創建自己的模型稱爲FriendlyMessage
:
public class FriendlyMessage {
private String text;
private String name;
// Created constructor with no Arguments
public FriendlyMessage() {
}
public FriendlyMessage(String text, String name) {
this.text = text;
this.name = name;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
最重要事情我們已經創建構造不帶參數 這是在DataSnapShot
失蹤
注意:上面的模型類僅僅是一個例子,因爲您是firebase中的新成員。你可以擁有你自己的模型類和你自己的參數類型。
使用它像這樣爲你的火力地堡Recyclerview:
FirebaseRecyclerAdapter mFirebaseAdapter = new FirebaseRecyclerAdapter<FriendlyMessage, MyHolder>(
FriendlyMessage.class,
R.layout.row_slots,
MyHolder.class,
databaseReference.child("slots").child(uid).child(dayOfWeek).child("time")) {
@Override
protected void populateViewHolder(MyHolder viewHolder, FriendlyMessage friendlyMessage, int position)
{
}
};
編輯:
它也不管你是如何推動在數據庫中的數據。直接用你的模型類 。
例如,對於上述模型FriendlyMessage
推這樣的:
FriendlyMessage friendlyMessage = new FriendlyMessage("message", "Username");
databaseReference.child(MESSAGES_CHILD).push().setValue(friendlyMessage);
這裏您child()
將是我的實現有些不同,這只是一個例子。
用於收聽特定DataSnapShot:
databaseReference.child("users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
//The PUSH ID OP WANTED
System.out.println("Push Id ---"+postSnapshot.getKey());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
})
解釋上述監聽器。它會爲您提供DataSnapShot
對象,讓您的每個用戶落入您的孩子「用戶」。 您可以通過getKey()
方法訪問Push id。
你必須定義自己的模型類。 – Piyush
是的,我已經這樣做了。但是對於我自己的模型類,我無法獲得每個節點的密鑰,因爲我們可以從快照中獲取密鑰。這就是爲什麼我正在嘗試使用快照。有沒有什麼辦法可以用我們自己的類來獲得節點的密鑰(沒有將密鑰存儲爲該節點的子節點) – Dhaval
我認爲存在一些誤解。讓我們假設有一個節點用戶。每次我使用方法push()添加新用戶。現在用戶有兩個孩子的名字和電子郵件。所以爲了檢索,我創建了一個帶有兩個字段名稱和電子郵件的User.class。一切正常。但是,如果我想檢索該用戶的推送ID,該怎麼辦?使用快照我們可以得到,但使用User.class我們不能得到這是因爲用戶節點中沒有包含推式ID的子節點。 – Dhaval