嘿,我正在開發一個應用程式,我需要從實時資料庫的集合中獲取密鑰,我已將用戶 ID 存盤在集合內的密鑰中。我正在對我將從這些鍵中獲得的 id 執行 firestore 查詢。因此,當我嘗試從字串中的實時資料庫中獲取密鑰時,此處的字串為空“whereEqualTo(“uid”,recentUserId)”。如何獲取密鑰以便我可以執行查詢。
String recentUserId;
// Code to get the user id's from the realtime databse stored in keys
firebaseDatabase.getReference().child("Recent_Chats").child(auth.getUid()).get().addOnSuccessListener(new OnSuccessListener<DataSnapshot>() {
@Override
public void onSuccess(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot1 : dataSnapshot.getChildren()) {
recentUserId = snapshot1.getKey();
Toast.makeText(getContext(), "hey therere" recentUserId, Toast.LENGTH_SHORT).show();
}
}
});
// Code to get the relevent ids user data from firestore
Query query = firebaseFirestore.collection("Users").whereEqualTo("uid", recentUserId);
query.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
List<DocumentSnapshot> list = queryDocumentSnapshots.getDocuments();
for (DocumentSnapshot d : list) {
User obj = d.toObject(User.class);
userArrayList.add(obj);
}
adapter.notifyDataSetChanged();
}
});
實時資料庫結構:

我嘗試了一些方法,但沒有得到如何獲取密鑰。
uj5u.com熱心網友回復:
從 Firebase(和大多數現代云 API)加載資料是異步的,您現在撰寫代碼的方式意味著 Firestore 上的查詢將在recentUserId = snapshot1.getKey();設定之前發生。
為了確保正確的順序,所有需要資料庫資料的代碼都必須在加載資料時觸發的代碼中onDataChange,或者從那里呼叫,或者以其他方式同步。
所以最簡單的解決方法是將加載從 Firestore 移動到onDataChange這樣的:
String recentUserId;
// Code to get the user id's from the realtime databse stored in keys
firebaseDatabase.getReference().child("Recent_Chats").child(auth.getUid()).get().addOnSuccessListener(new OnSuccessListener<DataSnapshot>() {
@Override
public void onSuccess(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot1 : dataSnapshot.getChildren()) {
recentUserId = snapshot1.getKey();
Toast.makeText(getContext(), "hey therere" recentUserId, Toast.LENGTH_SHORT).show();
// ?? Code to get the relevent ids user data from firestore
Query query = firebaseFirestore.collection("Users").whereEqualTo("uid", recentUserId);
query.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
List<DocumentSnapshot> list = queryDocumentSnapshots.getDocuments();
for (DocumentSnapshot d : list) {
User obj = d.toObject(User.class);
userArrayList.add(obj);
}
adapter.notifyDataSetChanged();
}
});
}
}
});
還可以在這里查看我的更長解釋:getContactsFromFirebase() 方法回傳一個空串列和在 Firebase 偵聽器中設定單例屬性值
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/532390.html
標籤:Google Cloud Collective 爪哇安卓firebase-实时数据库谷歌云火库
