如何从文档中检索嵌套对象并将其显示在 FirestoreRecyclerOptions 中?
How to retrieve nested object from a document and display it in FirestoreRecyclerOptions?
我在 Firestore 中有这个数据结构,如图所示。
我正在使用 FirestoreRecyclerOptions
来显示用户的地址。我将地址存储为 POJO (UserAddressModel.java),我不知道以这种方式存储它是否是最佳做法,但我是这样做的。
UserInformationsModel.java
public class UserInformationsModel {
private String email, username, name ;
private UserAddressModel userAddress;
private String phoneNumber;
private String photo;
private String photoUrl;
public UserInformationsModel() {
}
}
UserAddressModel.java
public class UserAddressModel {
private String fullName, streetAddressOne, streetAddressTwo, city, state, country;
private String zipCode;
public UserAddressModel() {
}
public UserAddressModel( String streetAddressOne, String city, String state, String country, String zipCode) {
this.streetAddressOne = streetAddressOne;
this.city = city;
this.state = state;
this.country = country;
this.zipCode = zipCode;
}
public String getFullName() {
return fullName;
}
public String getStreetAddressOne() {
return streetAddressOne;
}
public String getStreetAddressTwo() {
return streetAddressTwo;
}
public String getCity() {
return city;
}
public String getState() {
return state;
}
public String getCountry() {
return country;
}
public String getZipCode() {
return zipCode;
}
我已经创建了扩展 FirestoreRecyclerAdapter 及其布局的 AdapterAddress class。
我的问题是如何在我的 recyclerview 中显示地址 1 和地址 2?
因为我注意到 setQuery
方法需要查询,但我不知道如何获取地址
Query query = coll_ref.orderBy("?????");
FirestoreRecyclerOptions<UserAddressModel> options = new FirestoreRecyclerOptions.Builder<UserAddressModel>()
.setQuery(query, UserAddressModel.class)
.build();
adapterAddress = new AdapterAddress(options);
您无法使用查询获取这些地址。当您需要获取集合中的所有文档或需要过滤它们时,FirestoreRecyclerOptions
对象需要将 Query
或 CollectionReference
传递给 setQuery()
方法。
您需要做的是获取用户文档的参考并进行 get()
调用:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference usersRef = rootRef.collection("users");
usersRef.document(uid).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Map<String, Object> map = document.getData();
}
}
}
});
查看,document.getData()
returns 一张地图。简单地遍历地图并获取地址。
我在 Firestore 中有这个数据结构,如图所示。
我正在使用 FirestoreRecyclerOptions
来显示用户的地址。我将地址存储为 POJO (UserAddressModel.java),我不知道以这种方式存储它是否是最佳做法,但我是这样做的。
UserInformationsModel.java
public class UserInformationsModel {
private String email, username, name ;
private UserAddressModel userAddress;
private String phoneNumber;
private String photo;
private String photoUrl;
public UserInformationsModel() {
}
}
UserAddressModel.java
public class UserAddressModel {
private String fullName, streetAddressOne, streetAddressTwo, city, state, country;
private String zipCode;
public UserAddressModel() {
}
public UserAddressModel( String streetAddressOne, String city, String state, String country, String zipCode) {
this.streetAddressOne = streetAddressOne;
this.city = city;
this.state = state;
this.country = country;
this.zipCode = zipCode;
}
public String getFullName() {
return fullName;
}
public String getStreetAddressOne() {
return streetAddressOne;
}
public String getStreetAddressTwo() {
return streetAddressTwo;
}
public String getCity() {
return city;
}
public String getState() {
return state;
}
public String getCountry() {
return country;
}
public String getZipCode() {
return zipCode;
}
我已经创建了扩展 FirestoreRecyclerAdapter 及其布局的 AdapterAddress class。
我的问题是如何在我的 recyclerview 中显示地址 1 和地址 2?
因为我注意到 setQuery
方法需要查询,但我不知道如何获取地址
Query query = coll_ref.orderBy("?????");
FirestoreRecyclerOptions<UserAddressModel> options = new FirestoreRecyclerOptions.Builder<UserAddressModel>()
.setQuery(query, UserAddressModel.class)
.build();
adapterAddress = new AdapterAddress(options);
您无法使用查询获取这些地址。当您需要获取集合中的所有文档或需要过滤它们时,FirestoreRecyclerOptions
对象需要将 Query
或 CollectionReference
传递给 setQuery()
方法。
您需要做的是获取用户文档的参考并进行 get()
调用:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference usersRef = rootRef.collection("users");
usersRef.document(uid).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
Map<String, Object> map = document.getData();
}
}
}
});
查看,document.getData()
returns 一张地图。简单地遍历地图并获取地址。