使用Java加入Firebase实时数据库?

使用Java加入Firebase实时数据库?,java,android,firebase-realtime-database,Java,Android,Firebase Realtime Database,我试图用java中的firebase连接两个节点,但我无法关联所有数据并将其正确显示在视图中。有解决办法吗 这是firebase中的数据: 人 66db3d6a-c6cf-4577-a857-eca22cd55403 名称:“aaa” 姓:“bbb” 邮件:“john@hotmail.com" id:“66db3d6a-c6cf-4577-a857-eca22cd55403” 使用者 4ad0c3db-a5b1-40bb-bfc1-35c15ec5af9c 姓名用户:“john123

我试图用java中的firebase连接两个节点,但我无法关联所有数据并将其正确显示在视图中。有解决办法吗

这是firebase中的数据:

    • 66db3d6a-c6cf-4577-a857-eca22cd55403
      • 名称:“aaa”
      • 姓:“bbb”
      • 邮件:“john@hotmail.com"
      • id:“66db3d6a-c6cf-4577-a857-eca22cd55403”
  • 使用者
    • 4ad0c3db-a5b1-40bb-bfc1-35c15ec5af9c
      • 姓名用户:“john123”
      • 密码:“*******”
      • Iderson:“66db3d6a-c6cf-4577-a857-eca22cd55403”
      • idUser:“4ad0c3db-a5b1-40bb-bfc1-35c15ec5af9c”
  • 这是我的代码:

    private void listAll(){
    
     Map<String, String> valuesMapJoin = new HashMap<>();
    
             databaseReference.child("Person").orderByKey().addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
    
                         Map<String, String> valuesMapPerson = 
                        (HashMap<String,String>)dataSnapshot1.getValue();
    
                        String idPerson = valuesMapPerson.get("id");
                        String name = valuesMapPersona.get("name");
                        String surname = valuesMapPersona.get("surname");
                        String surname = valuesMapPersona.get("mail");
    
               databaseReference.child("User").orderByKey().equalTo(idPerson).addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
    
    
                                    Map<String, String> valuesMapUser = (HashMap<String, 
                                    String>)dataSnapshot1.getValue();
                                    String nameUser = valuesMapUsuario.get("nameUser");
                                    String password = valuesMapUsuario.get("password");
    
                                    listDataJoin.add(name + "-" + sourname + "-" + mail + "-" + nameUser + "- 
                                    " + password);
                                    arrayAdapter = new ArrayAdapter<String>(MainActivity.this, 
                                    android.R.layout.simple_list_item_1, listDatosJoin);
                                    listJoin.setAdapter(arrayAdapter);
    
                                }
                            }
    
                            @Override
                            public void onCancelled(@NonNull DatabaseError databaseError) {
    
                            }
                        });
    
                    }
    
                }
    
                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
    
                }
            });
    
        }
    
    private void listAll(){
    映射值mappjoin=newhashmap();
    databaseReference.child(“Person”).orderByKey().addValueEventListener(新的ValueEventListener()){
    @凌驾
    public void onDataChange(@NonNull DataSnapshot DataSnapshot){
    对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren()){
    映射值映射子=
    (HashMap)dataSnapshot1.getValue();
    字符串idPerson=valuesMapPerson.get(“id”);
    字符串名称=valuesMapPersona.get(“名称”);
    字符串姓氏=valuesMapPersona.get(“姓氏”);
    字符串姓氏=valuesMapPersona.get(“邮件”);
    databaseReference.child(“User”).orderByKey().equalTo(idPerson).addValueEventListener(新的ValueEventListener()){
    @凌驾
    public void onDataChange(@NonNull DataSnapshot DataSnapshot){
    对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren()){
    映射值MapUser=(HashMap)dataSnapshot1.getValue();
    字符串nameUser=valuesmapsuario.get(“nameUser”);
    字符串password=valuesmapsuario.get(“密码”);
    添加(name+“-”+sourname+“-”+mail+“-”+nameUser+”-
    “+密码);
    arrayAdapter=新的arrayAdapter(MainActivity.this,
    android.R.layout.simple_list_item_1,listDatosJoin);
    setAdapter(arrayAdapter);
    }
    }
    @凌驾
    已取消的公共void(@NonNull DatabaseError DatabaseError){
    }
    });
    }
    }
    @凌驾
    已取消的公共void(@NonNull DatabaseError DatabaseError){
    }
    });
    }
    
    private void listAll(){
    映射值mappjoin=newhashmap();
    databaseReference.child(“Person”).orderByKey().addValueEventListener(新的ValueEventListener()){
    @凌驾
    public void onDataChange(@NonNull DataSnapshot DataSnapshot){
    对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren()){
    映射值映射子=
    (HashMap)dataSnapshot1.getValue();
    字符串idPerson=valuesMapPerson.get(“id”);
    字符串名称=valuesMapPersona.get(“名称”);
    字符串姓氏=valuesMapPersona.get(“姓氏”);
    字符串姓氏=valuesMapPersona.get(“邮件”);
    databaseReference.child(“User”).orderByKey().equalTo(idPerson).addValueEventListener(新的ValueEventListener()){
    @凌驾
    public void onDataChange(@NonNull DataSnapshot DataSnapshot){
    对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren()){
    映射值MapUser=(HashMap)dataSnapshot1.getValue();
    字符串nameUser=valuesmapsuario.get(“nameUser”);
    字符串password=valuesmapsuario.get(“密码”);
    添加(name+“-”+sourname+“-”+mail+“-”+nameUser+”-
    “+密码);
    }
    }
    @凌驾
    已取消的公共void(@NonNull DatabaseError DatabaseError){
    }
    });
    }
    arrayAdapter=新的arrayAdapter(MainActivity.this,
    android.R.layout.simple_list_item_1,listDatosJoin);
    setAdapter(arrayAdapter);
    }
    @凌驾
    已取消的公共void(@NonNull DatabaseError DatabaseError){
    }
    });
    }
    

    使用上述代码段的主要问题是,您在for循环中设置了适配器,因此您的代码无法完美工作

    此代码中到底有什么不符合您的预期?谢谢@DarshakPatel。有没有其他方法可以提高连接的效率?有没有其他方法可以在将数组传递给适配器时水平显示数组中的内容,从而在视图中显示它,即逐行显示相关数据?你可以这样做吗?是的,你可以使用水平的回收视图。收到阵列后,请设置适配器。
    private void listAll(){
    
    Map<String, String> valuesMapJoin = new HashMap<>();
    
         databaseReference.child("Person").orderByKey().addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
    
                     Map<String, String> valuesMapPerson = 
                    (HashMap<String,String>)dataSnapshot1.getValue();
    
                    String idPerson = valuesMapPerson.get("id");
                    String name = valuesMapPersona.get("name");
                    String surname = valuesMapPersona.get("surname");
                    String surname = valuesMapPersona.get("mail");
    
           databaseReference.child("User").orderByKey().equalTo(idPerson).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
    
    
                                Map<String, String> valuesMapUser = (HashMap<String, 
                                String>)dataSnapshot1.getValue();
                                String nameUser = valuesMapUsuario.get("nameUser");
                                String password = valuesMapUsuario.get("password");
    
                                listDataJoin.add(name + "-" + sourname + "-" + mail + "-" + nameUser + "- 
                                " + password);
    
    
                            }
                        }
    
                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {
    
                        }
                    });
    
                }
    
                arrayAdapter = new ArrayAdapter<String>(MainActivity.this, 
                   android.R.layout.simple_list_item_1, listDatosJoin);
                   listJoin.setAdapter(arrayAdapter);
            }
    
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
    
            }
        });
    
    }