gpt4 book ai didi

android - Firebase 将数据保存为列表,有时保存为 map 对象

转载 作者:行者123 更新时间:2023-12-04 17:53:05 24 4
gpt4 key购买 nike

我将带有键的数据保存为数值,其中键是用户尝试的问题。如果用户尝试了所有问题,例如,它可能是连续的。键可能是 0,1,2,3... 这由 Firebase 保存为数组(如图所示)

list as saved by 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 将其保存为 map (如图所示)

map as saved by 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);

}

用户对象类
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 .

我怎么解决这个问题?

最佳答案

当使用从零开始的连续键(即 0、1、2 等)保存信息时,您将返回一个列表,在我的情况下,我是从 One 开始的,所以出于某种原因,它让我返回了一个以 a 开头的列表空元素。当键不连续时,将返回一个 Map。在了解了这一点后,我最终通过类型检查对其进行了修补,并且由于列表案例中的 null ,我删除了第一个元素。

when (it) {
is Map<*, *> -> doSomething(it.values.toList() as List<HashMap<String, Any>>)
is List<*> -> doSomething((it.subList(1,it.size)) as List<HashMap<String, Any>>)
is Any -> return
}

在示例中 doSomething 只需要 List<Hashmap<String, Any>>参数,但变量 it可以是 map 或列表。

关于android - Firebase 将数据保存为列表,有时保存为 map 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42872303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com