首页 > 解决方案 > 使用 Java 加入 Firebase 实时数据库?

问题描述

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

这是firebase中的数据:

    • 66db3d6a-c6cf-4577-a857-eca22cd55403
      • 名称:“aaa”
      • 姓氏:“bb”
      • 邮件:“john@hotmail.com”
      • 编号:“66db3d6a-c6cf-4577-a857-eca22cd55403”
  1. 用户
    • 4ad0c3db-a5b1-40bb-bfc1-35c15ec5af9c
      • 名称用户:“john123”
      • 密码:”******”
      • idPerson:“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) {

            }
        });

    }

标签: javaandroidfirebase-realtime-database

解决方案


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) {

        }
    });

}

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


推荐阅读