代码之家  ›  专栏  ›  技术社区  ›  PradyumanDixit

为什么Firebase childEventListener不能处理一个引用而处理另一个引用?

  •  -2
  • PradyumanDixit  · 技术社区  · 8 年前

    参考文献包括:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference usersRef = rootRef.child("users"); 
    
    DatabaseReference TUidRef = usersRef.child(td);
    

    td 从之前的活动中导出如下:

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
            final String dataName = parent.getItemAtPosition(position).toString();
            usersdRef.orderByChild("username").equalTo(dataName).addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for(DataSnapshot data: dataSnapshot.getChildren()){
                        String dataUID = data.child("uid").getValue(String.class);
                        Log.i("uid",dataUID);
                        startActivity(new Intent(Main2Activity.this, Main5Activity.class).putExtra("valueName", dataName).putExtra("valueUID",dataUID));
    
                    }
                }
    
                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
    
                }
            });
    
    
        }
    });
    
    Bundle bundle = getIntent().getExtras();
    td = bundle.getString("valueUID");
    

    这个 childEventListener 使用 usersRef TUidRef 它不会崩溃或者做任何事情,它只是什么都不做。

    database

    2 回复  |  直到 7 年前
        1
  •  1
  •   Frank van Puffelen    8 年前

    1. 加载时 /users 用一个 ValueEventListener ,的 DataSnapshot 你进去吧 onDataChange dataSnapshot.getChildren() 获取每个单独的用户。

    2. 当你 ,可能有多个子节点与查询条件匹配。所以这里也有 数据快照 你进去吧 onDataChange公司 包含一个用户列表,您需要对其进行循环。

    3. 值事件侦听器 /users/$uid ,的 数据快照 你进去吧 onDataChange公司 DataSnapshot.getChildren()

    最后一个案例的代码:

    TUidRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            String dataUID = data.child("uid").getValue(String.class);
            Log.i("uid",dataUID);
            startActivity(new Intent(Main2Activity.this, Main5Activity.class).putExtra("valueName", dataName).putExtra("valueUID",dataUID));
        }
        ...
    
        2
  •  0
  •   Mohammad Rbabah    8 年前

    我认为你没有正确地传递包裹试图改变

    td = bundle.getString("valueUID");
    

    td = getIntent().getString("valueUID");