所以我有一个查询设置,它将查询用户输入的年龄在数据库中的位置。由于某些原因,即使年龄在我的数据库中,它仍将返回null。
如果我输入35作为年龄,即使35是数据库中的年龄之一,它仍然会打印“ NULL”。我该如何解决?
{
"data" : [ {
"age" : 35,
"agratio" : 0.9,
"alb" : 3.3,
"alkphos" : 187,
"db" : 0.1,
"diagonsis" : "yes",
"gender" : 1,
"sgot" : 18,
"sgpt" : 16,
"tb" : 0.7,
"tp" : 6.8
}, {
"age" : 40,
"agratio" : 0.9,
"alb" : 3.3,
"alkphos" : 187,
"db" : 0.1,
"diagonsis" : "no",
"gender" : 1,
"sgot" : 18,
"sgpt" : 16,
"tb" : 0.7,
"tp" : 6.8
} ],
"users" : {
"234234adfsdsf" : {
"username" : "hey"
},
"BbZZCTIIcJdvCCU9og905kKVvo53" : {
"email" : "andy55@yahoo.com",
"username" : "andy"
}
}
}
代码:
@IBAction func onDiagnose(_ sender: Any) {
let ref = Database.database().reference(fromURL: "https://agetest.firebaseio.com/")
let databaseRef = ref.child("data")
databaseRef.queryOrdered(byChild: "age").queryEqual(toValue: String(ageTextField.text!)).observeSingleEvent(of: .value, with: { (snapshot) in
// if there is data in the snapshot reject the registration else allow it
if (snapshot.value! is NSNull) {
print("NULL")
} else {
print(snapshot.ref.parent?.key!)
//get parent
}
}) { (error) in
print(error.localizedDescription)
}
}
答案 0 :(得分:0)
根据我使用Fiebase Realtime数据库的经验,它不会像在JSON文件中那样容纳对象数组。我不得不将其简单地格式化为没有任何数组的嵌套对象。更像是:
"data" : {
<someRandomKey1> : {
"age" : 35,
"agratio" : 0.9,
"alb" : 3.3,
"alkphos" : 187,
"db" : 0.1,
"diagonsis" : "yes",
"gender" : 1,
"sgot" : 18,
"sgpt" : 16,
"tb" : 0.7,
"tp" : 6.8
},
<someRandomKey2> : {
"age" : 40,
"agratio" : 0.9,
"alb" : 3.3,
"alkphos" : 187,
"db" : 0.1,
"diagonsis" : "no",
"gender" : 1,
"sgot" : 18,
"sgpt" : 16,
"tb" : 0.7,
"tp" : 6.8
}
},
要确定这是否与您遇到的问题有关,您可能需要进入Firebase控制台,并通过Web界面查看实时数据库中的数据,以查看它是否在保存方式你期望与否。
答案 1 :(得分:0)
您正在将一个字符串(在您的代码中)与一个数据库中的一个数字进行比较,但两者并不相同。解决方案是先解析代码中的数字,然后再将其传递给queryEqual(toValue: )
:
databaseRef
.queryOrdered(byChild: "age")
.queryEqual(toValue: Int(ageTextField.text)!)
.observeSingleEvent(of: .value, with: { (snapshot) in