【发布时间】:2020-06-03 15:39:29
【问题描述】:
我将带有键的数据保存为数值,其中键是用户尝试的问题。如果用户尝试了所有问题,例如,它可能是连续的。键可能是 0,1,2,3... 这是由 Firebase 保存为数组(如图所示)
JSON 是
"parthgupta48@gmail,com": {
"attemptedQuestions": [
{
"answer": "533",
"status": "wrong",
"submissionTime": 1487796702453
},
{
"answer": "9",
"score": 10,
"status": "correct",
"submissionTime": 1487878744867
},
{
"answer": "4",
"status": "wrong",
"submissionTime": 1487956858227
},
{
"answer": "3",
"status": "wrong",
"submissionTime": 1488056247303
},
null,
{
"answer": "25",
"score": 16,
"status": "correct",
"submissionTime": 1488212417465
},
{
"answer": "3",
"status": "wrong",
"submissionTime": 1488380348815
},
null,
null,
null,
{
"answer": "50",
"score": 11,
"status": "correct",
"submissionTime": 1488648738615
}
],
当键不连续时,例如 0,9,15...当用户仅尝试某些问题时会发生这种情况,然后 Firebase 将其保存为地图(如图所示)
JSON 是
"priyanshu96,goyal@gmail,com" : {
"attemptedQuestions" : {
"0" : {
"answer" : "667",
"status" : "wrong",
"submissionTime" : 1487773682189
},
"10" : {
"answer" : "50",
"submissionTime" : 1488646361162
}
},
这是我用来在 Android 中检索数据的代码。
try {
mCurrentUser = child.getValue(UserObject.class);
} catch (Exception e) {
Utils.makeToast("Some Error Occurred ",LoginActivity.this);
}
userObject 类
public class UserObject implements Serializable {
private String name;
private String uid;
private String email;
private String photoUrl;
private String contact;//bekaar
private long credits;
public Map<String,AttemptedByUserObject> attemptedQuestions;
public void setAttemptedQuestions(Map<String, AttemptedByUserObject> attemptedQuestions) {
this.attemptedQuestions = attemptedQuestions;
}
public Map<String, AttemptedByUserObject> getAttemptedQuestions() {
return attemptedQuestions;
}
public long getCredits() {
return credits;
}
public void setCredits(long credits) {
this.credits = credits;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhotoUrl() {
return photoUrl;
}
public void setPhotoUrl(String photoUrl) {
this.photoUrl = photoUrl;
}
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = contact;
}}
但问题是attemptedQuestions数据保存为列表时需要列表,数据保存为Map时需要Map。
我该如何解决这个问题?
【问题讨论】:
-
Firebase 数据模型不太适合存储数组(或 Java
List对象)。见this blog post explaining the behavior you get。不要存储List,而是遵循Firebase documentation's approach for storing collections。这确实会将其存储为地图,这正是正确的方法,因为它可以防止您现在在操作项目时遇到的问题。 -
@FrankvanPuffelen 感谢您的回复,我不想将我的数据保存为列表,但我希望键是数字的,因为它们表示问题编号。有什么方法可以在 android 中获取数据而不管它的存储方式(即映射或数组)
-
如果你的项目有一个数字键,在它前面加上一个固定的字符串来绕过数组强制。例如。
"question10". -
这个解决方案可以在以后使用(当我保存新数据时)。我可以对保存的数据做些什么
标签: android firebase firebase-realtime-database