我是Google Firebase的新手,我正在尝试学习一些相关知识。 我正在做一个Android应用,您可以在其中创建一组人并设置该组的标题。然后,在“组页面”中,您可以在列表视图中看到所有组。 我的firestore数据库的结构如下:
用户-> 电子邮件(文档) ---> 组(集合)-> GroupName(文档) ,并且组名文档包含参与者数组arrayList(参与者0:Name1,partecipant1:name2等)。
我想检索文档ID(即组标题)和参与者的arrayList,但是我不知道在代码中对每个对象使用…
这是我的代码:
public void load_list_view(){
String email = getEmail();
final DocumentReference docRef = db.collection("users").document(email).collection("Group").document();
docRef.get()
.addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
titleArray.add(documentSnapshot.getId());
titleString = documentSnapshot.getId();
partecipantsArray.add(documentSnapshot.getString("partecipant"));
num_partecipants = partecipantsArray.size();
numArray.add(num_partecipants);
trash = R.drawable.trash_icon;
firstChar = Character.toString(titleString.charAt(0));
firstCharArray.add(firstChar);
customAdapter = new GroupAdapter(GroupActivity.this, firstCharArray, titleArray, numArray, trash);
listView.setAdapter(customAdapter);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(GroupActivity.this, e.getStackTrace().toString(), Toast.LENGTH_LONG).show();
}
});
}
使用titleArray.add(documentSnapshot.getId());
会检索一个随机ID,我不明白为什么。
我在Internet上找不到关于Arraylist
和Firestore的足够文档。
答案 0 :(得分:1)
首先,要获取集合中的所有文档,您应该以不同的方式编写代码,如this documentation所示。
db.collection("cities")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d(TAG, document.getId() + " => " + document.getData());
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
第二,如果要检索ArrayList,则应使用(ArrayList<String>) documentSnapshot.get("key")
而不是documentSnapshot.getString("key")
。
第三次,您将获得随机ID,因为Firebase使用以下代码行(如下所述)正在生成具有随机ID的新文档引用。 Reference Link。
final DocumentReference docRef = db.collection("users").document(email).collection("Group").document();
在您的帮助下,我们对您的代码进行了调整,您可以尝试使用此代码并检查其是否正常运行。
public void load_list_view() {
String email = getEmail();
final DocumentReference docRef = firestore.collection("users").document(email);
docRef.collection("Group")
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (QueryDocumentSnapshot document : queryDocumentSnapshots) {
//Extracting Group name from each document
titleString = document.getId();
titleArray.add(titleString);
//Extracting participants ArrayList from each document
partecipantsArray.add((ArrayList<String>) document.get("participant"));
numArray.add(num_partecipants);
firstChar = Character.toString(titleString.charAt(0));
firstCharArray.add(firstChar);
}
num_partecipants = partecipantsArray.size();
numArray.add(num_partecipants);
trash = R.drawable.trash_icon;
firstChar = Character.toString(titleString.charAt(0));
firstCharArray.add(firstChar);
customAdapter = new GroupAdapter(GroupActivity.this, firstCharArray, titleArray, numArray, trash);
listView.setAdapter(customAdapter);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
//HANDLE EXCEPTION
}
});
}