我需要从 Firebase 数据库中的节点密码中获取字符串值以与用户输入进行比较,但不幸的是我无法获取该值。这是下图中我的 firebase 数据库的链接。
这是我的代码如下:
final DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("pin_code");
mDatabase.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
String rface = (String) dataSnapshot.child("pincode").getValue();
if (rface.equals(userPassword) && !rface.equals("")){
Intent intent = new Intent(PinActivity.this, ProfileActivity.class);
startActivity(intent);
}
else {
if (rface.equals("") || rface.equals(null)){
// Creating new user node, which returns the unique key value
// new user node would be /users/$userid/
String userId = mDatabase.push().getKey();
// creating user object
Pin pin = new Pin(authUserId, userPassword);
mDatabase.child(userId).setValue(pin);
Intent intent = new Intent(PinActivity.this, ProfileActivity.class);
startActivity(intent);
}
else {
Toast.makeText(PinActivity.this,"Invalid PIN code", Toast.LENGTH_SHORT).show();
return;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这是json代码
{
"pin_code" : {
"id" : "TQYTo1NHNnhPJnOxhe1Vok3U6ic2",
"pincode" : "12345"
}
}
这FirebaseDatabase.getInstance().getReference("pin_code")
不是指您正在寻找的节点。您很可能知道该id
属性,在这种情况下,您可以通过以下方式获取节点:
DatabaseReference collection = FirebaseDatabase.getInstance().getReference("p...");
Query query = collection.orderByChild("id").equalTo("TQT...ic2");
query.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
for (DataSnapshot child: dataSnapshot.getChildren()) {
String rface = (String) child.child("pincode").getValue();
if (rface.equals(userPassword) && !rface.equals("")){
我所做的改变:
id
对集合下的每个子节点的属性创建一个查询。onDataChange
我们添加了一个循环。这是必需的,因为针对 Firebase 数据库的查询可能会有多个结果。所以dataSnapshot
包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。我们循环dataSnapshot.getChildren()
处理这些多个结果。如果只能有一个节点具有相同的id
,则应考虑更改数据结构以将id
用作节点的键。所以:
pin_codes
uid1: "pincode1"
uid2: "pincode2"
然后您的代码变得明显简单,因为您不再需要查询用户。您可以直接从路径中读取:
DatabaseReference user = FirebaseDatabase.getInstance().getReference("pin_codes").child("TQT...ic2");
user.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
String rface = (String) dataSnapshot.getValue();
if (rface.equals(userPassword) && !rface.equals("")){
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句