从firebase中检索单个条目

时间:2016-05-22 09:32:01

标签: java android firebase firebase-realtime-database

以下是我的火力显示数据。

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

                }
            });

4 个答案:

答案 0 :(得分:1)

您当前的代码执行查询。由于查询可以匹配多个子节点,因此它返回值列表。即使只有一个匹配结果,它也会返回一个列表。

您可以通过迭代子代来处理代码:

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);
  }
});

答案 1 :(得分:0)

您不应该复制ID,而是使用:

ref.orderByKey().equalTo()

您可以在那里找到您要搜索的内容:

https://www.firebase.com/docs/android/guide/retrieving-data.html

答案 2 :(得分:0)

为了让你的代码更具动态性,你可以声明一个字符串来获取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();
      }
    });

答案 3 :(得分:0)

如果您确定只需要输入一个条目(在这种情况下,因为每个记录都有唯一的ID),请使用伪代码,检索返回数据的0索引。