【问题标题】:How to retrieve nested object from a document and display it in FirestoreRecyclerOptions?如何从文档中检索嵌套对象并将其显示在 FirestoreRecyclerOptions 中?
【发布时间】:2019-08-16 17:07:12
【问题描述】:

我在 Firestore 中有这个数据结构,如图所示。

我正在使用FirestoreRecyclerOptions 来显示用户的地址。我将地址存储为 POJO (UserAddressModel.java),我不知道以这种方式存储它是否是最佳做法,但我是如何做到的。

用户信息模型.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 类。

我的问题是如何在我的 recyclerview 中显示 address1 和 address2 ? 因为我注意到setQuery 方法需要查询,但我不知道如何获取地址

Query query = coll_ref.orderBy("?????");

  FirestoreRecyclerOptions<UserAddressModel> options = new   FirestoreRecyclerOptions.Builder<UserAddressModel>()
            .setQuery(query, UserAddressModel.class)
            .build();
     adapterAddress = new AdapterAddress(options);

【问题讨论】:

    标签: java android firebase google-cloud-firestore firebaseui


    【解决方案1】:

    您无法使用查询获得这些地址。当您需要获取集合中的所有文档或需要过滤它们时,FirestoreRecyclerOptions 对象需要将 QueryCollectionReference 传递给 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() 返回一个地图。只需遍历地图并获取地址。

    【讨论】:

    • 我仍然无法解决这个问题,我设法通过Map&lt;String, Object&gt; items = (Map&lt;String, Object&gt;) document.get("addresses") 获取地址值并迭代Map.Entry&lt;String, Object&gt; 但我不知道如何将它们作为UserAddressModel.class 对象传递给recyclerview
    • 正如我已经说过的,你不能。为了使用FirestoreRecyclerOptions,您应该使用查询,但这是不可能的,因为您只获得一个文档。使用另一种类型的适配器,您的问题将得到解决。在这种情况下,Firebase-UI 对您没有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多