简体   繁体   中英

Join Firebase Realtime Database with Java?

I am trying to join between two nodes with firebase in java, but I can't relate all the data and display it in the view correctly. Any solution?

This is the data in firebase:

  1. Person
    • 66db3d6a-c6cf-4577-a857-eca22cd55403
      • name:"aaa"
      • surname:"bbb"
      • mail:"john@hotmail.com"
      • id:"66db3d6a-c6cf-4577-a857-eca22cd55403"
  2. User
    • 4ad0c3db-a5b1-40bb-bfc1-35c15ec5af9c
      • nameUser:"john123"
      • password:"******"
      • idPerson:"66db3d6a-c6cf-4577-a857-eca22cd55403"
      • idUser:"4ad0c3db-a5b1-40bb-bfc1-35c15ec5af9c"

This is my code:

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

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

        }
    });

}

Use above code snippet main problem is you have adapter set inside for loop so your code not work perfectly

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM