如何将 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;
}
好的,所以标题可能有点模棱两可或难以理解,所以我会尽量详细一点。我正在编写一个我有用户的 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;
}