理想情況下,我們需要更多地瞭解您正在嘗試做什麼。
應用程序的用戶是否可以訪問所有這些用戶ID?還是應該只能訪問自己的?他們是管理員,還是最終用戶等?
當你說「一個獲取用戶ID的函數」時,你的意思是你提供了這個ID,並且該函數返回該用戶ID中該人的名字?另外,在這種情況下,您正在對用戶標識進行硬編碼。這僅僅是爲了測試嗎? 您是否在使用Firebase Auth進行用戶註冊等,或者沒有註冊?
很難在不知道更多的情況下回答這個問題,但讓我們假設用戶從Firebase獲取任何字符串的最新消息。 (如果使用Firebase身份驗證,則DatabaseReference略有不同)
因此,您需要一個映射到樹中正確節點的DatabaseReference。在你的例子中,用戶將無法訪問用戶1和2.(這是你想要的嗎?)。在我的示例中,他們可以訪問0,1和2.
現在,您只需將偵聽器添加到您正在查找的數據庫引用的子級。在下面的情況下,我們要求具有「0」鍵的值。
public void checkFunction() {
private FirebaseDatabase mRef;
//String variable to store whatever value we're looking for
String mName = "";
//Our reference knows only "Users" and all of its children
mRef = FirebaseDatabase.getInstance().getReference().child("Users");
//Adding a listener for the value associated with the user key "0"
mRef.child("0").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
//In this case, "shalom" will be stored in mName
mName = (String) snapshot.getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
希望這可以讓我們更容易理解發生了什麼。
在不知情的情況下很難回答這個問題,但我懷疑你需要重新考慮數據庫的結構。也許更符合下面的結構,其中RandomUserIdsHere是在使用Firebase身份驗證註冊時分配給每個用戶的自動生成的uids。
todofirebaseapp-4c83d{
"Users" :{
"*RandomUserIdsHere*" : {
"FirstName" : "Joe",
"LastName" : "Bloggs",
"Age" : "30"
}
"*AnotherRandomUserIdsHere*" : {
"FirstName" : "Jane",
"LastName" : "Doe",
"Age" : "21"
}
"*AnotherRandomUserIdsHere*" : {
"FirstName" : "John",
"LastName" : "Doe",
"Age" : "47"
}
}
}
在這種情況下,DatabaseReference看起來有點不同。我們會像這樣通過uid。
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid;
mRef = FirebaseDatabase.getInstance().getReference("todofirebaseapp-4c83d").child("Users").child(uid);
編輯:改正我無法SPEL。
請將您的代碼發送 –
請讓我們知道您嘗試了什麼 – FaisalAhmed
哪一個是用戶ID? –