如何将 collection 的数据存储在 class 中,而 Java 中来自 Firebase 的数据中有嵌套的 collection?

How to store a collection of data in a class where there is a nested collection in that data from Firebase in Java?

好的,所以标题可能有点模棱两可或难以理解,所以我会尽量详细一点。我正在编写一个我有用户的 android 应用程序。

firebase 中的 json 如下所示:

user{
   $auid{
      "Name": "blah",
      "email": "blah",
      "image": "blah",
      "conversationKeys"{
                         "randKey":"key",
                         "randKey":"key",
                         "randKey":"key",
                        }
                 }
}

所以我遇到的问题是嵌套的 collection(对话键),它们是完全不同 collection 中对话的键。我不知道如何将它们存储在用户 java class 中。我曾尝试将 class 中的值设为 arrayList,希望它能正常工作。

我用它来检索数据:

userRef = new Firebase((new FireBaseAPI()).getUsersURL()+"/"+sharedPrefs.getAuthuid());
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
user = dataSnapshot.getValue(UserData.class);
}

我希望能够将其全部存储在一个 class 中,其中对话键存储在 arrayList 或数组或其他任何内容中。

如有任何帮助,我们将不胜感激。如果需要更清晰,请不要犹豫。感谢您的帮助。

另外,用户数据class是:

    public class UserData {

    public String displayName;
    public String profileImageURL;
    public String coverImageURL;
    public String lastLogin;
    public String provider;
    public String bio;
    public ArrayList<String> conversationKeys;

    public ArrayList<String> getConversationKeys() {
        return conversationKeys;
    }

    public void setConversationKeys(ArrayList<String> conversationKeys) {
        this.conversationKeys = conversationKeys;
    }

    public UserData(String name,
                    String profilePic,
                    String coverPic) {

        this.displayName = name;
        this.profileImageURL = profilePic;
        this.coverImageURL = coverPic;
    }

    public UserData() {

    }

    public String getBio() {
        return bio;
    }

    public void setBio(String bio) {
        this.bio = bio;
    }

    public String getProvider() {
        return provider;
    }

    public void setProvider(String provider) {
        this.provider = provider;
    }

    public String getLastLogin() {
        return lastLogin;
    }



    public void setLastLogin(String lastLogin) {
        this.lastLogin = lastLogin;
    }

    public String getProfileImageURL() {
        return profileImageURL;
    }

    public void setProfileImageURL(String profileImageURL) {
        this.profileImageURL = profileImageURL;
    }

    public String getCoverImageURL() {
        return coverImageURL;
    }

    public void setCoverImageURL(String coverImageURL) {
        this.coverImageURL = coverImageURL;
    }

    public String getDisplayName() {
        return displayName;
    }


    public void setDisplayName(String displayName) {
        this.displayName = displayName;
    }
}

对话键存储为 key/value 对,而不是数组。 因此,您需要将它们检索到 Map(而不是您尝试获取的 array/list)。

对于 JSON 中的 conversationKeys 属性,将其添加到您的 class:

public class UserData {
    ...
    private Map<String,String> conversationKeys;

    public Map<String,String> getConversationKeys() {
        return conversationKeys;
    }