从 firebase 中检索单个条目
Retrieve a single entry from firebase
下面是我的 firebase 数据。
users
a81b0dec-671e-4840-9977-e932274928fb
email: "s@s.com"
screenname: "SSS"
totalmoney: "0"
uid: "a81b0dec-671e-4840-9977-e932274928fb"
c934beeb-51d2-4919-bff0-64153abff1dd
email: "p@p.com"
screenname: "PPP"
totalmoney: "0"
uid: "c934beeb-51d2-4919-bff0-64153abff1dd"
e0187af9-20a9-4088-a86c-7fb8cf3b4d47
email: "o@o.com"
screenname: "OOO"
totalmoney: "0"
uid: "e0187af9-20a9-4088-a86c-7fb8cf3b4d47"
如何检索 uid = "a81b0dec-671e-4840-9977-e932274928fb" 的节点。
到目前为止,这是我尝试过的方法,但没有用。
String uid = "a81b0dec-671e-4840-9977-e932274928fb";
Query query = fb.orderByChild("uid").equalTo(uid);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot data) {
// TODO Auto-generated method stub
Log.i("SINGLE VALUE EVENT", data.toString());
}
@Override
public void onCancelled(FirebaseError error) {
// TODO Auto-generated method stub
}
});
您不应该复制 ID,而是使用:
ref.orderByKey().equalTo()
您可以在那里找到您要搜索的内容:
https://www.firebase.com/docs/android/guide/retrieving-data.html
您当前的代码执行查询。由于查询可以匹配多个子节点,因此它 returns 是一个值列表。即使只有一个匹配结果,它也是 returns 一个列表。
您可以通过遍历子项在代码中处理此问题:
public void onDataChange(DataSnapshot data) {
for (DataSnapshot userSnap: data.getChildren) {
Log.i("SINGLE VALUE EVENT", userSnap.child("email").getValue(String.class));
}
}
但在这种情况下,您甚至不需要查询,因为您(明智地)也将用户存储在他们的 uid 下。这意味着您可以通过该 uid 直接访问用户,这样可以节省一些代码并且速度会更快:
String uid = "a81b0dec-671e-4840-9977-e932274928fb";
DatabaseReference user = fb.child(uid);
user.addListenerForSingleValueEvent(new ValueEventListener() {
public void onDataChange(DataSnapshot data) {
Log.i("SINGLE VALUE EVENT", data.child("email").getValue(String.class));
}
public void onCancelled(FirebaseError error) {
Log.e(TAG, error);
}
});
为了使您的代码更加动态..您可以声明一个字符串来获取 uid 值
EditText edt = (EditText)findViewById(R.id.editText);
String edtText = edt.getText().toString().trim();
String uid = edtText;
DatabaseReference db = fb.child(uid);
db.addListenerForSingleValueEvent(new ValueEventListener() {
public void onDataChange(DataSnapshot snapshot) {
Toast.makeText(this, "Email for supplied user is : " + snapshot.child("email").getValue(String.class), Toast.LENGTH_SHORT).show();
}
public void onCancelled(FirebaseError error) {
Toast.makeText(this,"Error as a result of " + error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
如果您确定您只需要一个条目(在这种情况下,因为每条记录都有一个唯一的 ID),我会说使用 psudo 代码,检索返回数据的 0 索引。
下面是我的 firebase 数据。
users
a81b0dec-671e-4840-9977-e932274928fb
email: "s@s.com"
screenname: "SSS"
totalmoney: "0"
uid: "a81b0dec-671e-4840-9977-e932274928fb"
c934beeb-51d2-4919-bff0-64153abff1dd
email: "p@p.com"
screenname: "PPP"
totalmoney: "0"
uid: "c934beeb-51d2-4919-bff0-64153abff1dd"
e0187af9-20a9-4088-a86c-7fb8cf3b4d47
email: "o@o.com"
screenname: "OOO"
totalmoney: "0"
uid: "e0187af9-20a9-4088-a86c-7fb8cf3b4d47"
如何检索 uid = "a81b0dec-671e-4840-9977-e932274928fb" 的节点。 到目前为止,这是我尝试过的方法,但没有用。
String uid = "a81b0dec-671e-4840-9977-e932274928fb";
Query query = fb.orderByChild("uid").equalTo(uid);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot data) {
// TODO Auto-generated method stub
Log.i("SINGLE VALUE EVENT", data.toString());
}
@Override
public void onCancelled(FirebaseError error) {
// TODO Auto-generated method stub
}
});
您不应该复制 ID,而是使用:
ref.orderByKey().equalTo()
您可以在那里找到您要搜索的内容:
https://www.firebase.com/docs/android/guide/retrieving-data.html
您当前的代码执行查询。由于查询可以匹配多个子节点,因此它 returns 是一个值列表。即使只有一个匹配结果,它也是 returns 一个列表。
您可以通过遍历子项在代码中处理此问题:
public void onDataChange(DataSnapshot data) {
for (DataSnapshot userSnap: data.getChildren) {
Log.i("SINGLE VALUE EVENT", userSnap.child("email").getValue(String.class));
}
}
但在这种情况下,您甚至不需要查询,因为您(明智地)也将用户存储在他们的 uid 下。这意味着您可以通过该 uid 直接访问用户,这样可以节省一些代码并且速度会更快:
String uid = "a81b0dec-671e-4840-9977-e932274928fb";
DatabaseReference user = fb.child(uid);
user.addListenerForSingleValueEvent(new ValueEventListener() {
public void onDataChange(DataSnapshot data) {
Log.i("SINGLE VALUE EVENT", data.child("email").getValue(String.class));
}
public void onCancelled(FirebaseError error) {
Log.e(TAG, error);
}
});
为了使您的代码更加动态..您可以声明一个字符串来获取 uid 值
EditText edt = (EditText)findViewById(R.id.editText);
String edtText = edt.getText().toString().trim();
String uid = edtText;
DatabaseReference db = fb.child(uid);
db.addListenerForSingleValueEvent(new ValueEventListener() {
public void onDataChange(DataSnapshot snapshot) {
Toast.makeText(this, "Email for supplied user is : " + snapshot.child("email").getValue(String.class), Toast.LENGTH_SHORT).show();
}
public void onCancelled(FirebaseError error) {
Toast.makeText(this,"Error as a result of " + error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
如果您确定您只需要一个条目(在这种情况下,因为每条记录都有一个唯一的 ID),我会说使用 psudo 代码,检索返回数据的 0 索引。