简体   繁体   中英

How do i get the key UID of a node with a selected value in firebase database in android?

Below is my database in firebase

Areas 
   -AreaUID1 
      -Admin 
         -Admin1UID 
              -admin_name:"" 
              -admin_area:"" 
              -admin_email:"" 
         -Admin2UID 
              -admin_name:"" 
              -admin_area:""
              -admin_email:""
              .
              .
      -Events
          -EventUid1
                -event_name:""
                -event_timings:""
         -EventUid2
                -event_name:""
                -event_timings:""
            .
            .

      -Gallery
          -ImageUid1
                -image_link:""

  -AreaUid2
       -Admin 
         -Admin1UID 
              -admin_name:"" 
              -admin_area:"" 
              -admin_email:"" 
         -Admin2UID 
              -admin_name:"" 
              -admin_area:""
              -admin_email:""
              .
              .
      -Events
          -EventUid1
                -event_name:""
                -event_timings:""
         -EventUid2
                -event_name:""
                -event_timings:""
            .
            .

      -Gallery
          -ImageUid1
                -image_link:""

What i want to achieve?

I want to get the AreaUID of the areas considering the fact that there is a list of admin_areas available populated with the help of the same database. Now when a user clicks on an item in the list i want to get the AreaUID of the node whose admin_area matches the selected admin_area from the list.

For eg) Here is a list of areas presented to the user -

1)Area 1

2)Area 2

3)Area 3

4)Area 4

When the user taps on Area 2 i want to fetch its AreaUid.How do i do this? Below is some code for reference

mDbRef = FirebaseDatabase.getInstance().getReference().child("Areas");
        arr = new ArrayList<>();
        listView = (ListView) findViewById(R.id.list_of_areas);
        ValueEventListener listener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    String areaUid = snapshot.getKey();
                    Log.i("AreaUID", areaUid);
                    showListOfAreas(areaUid);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                System.out.println(databaseError.toException());
            }
        };
        mDbRef.addValueEventListener(listener);


    }

    private void showListOfAreas(final String areaUid) {

        pd.setTitle("Fetching Registered Areas");
        pd.setMessage("Loading Areas...");
        pd.show();
        DatabaseReference mAreaNameRef = mDbRef.getRef().child(areaUid).child("Admin").child("admin1");

        mAreaNameRef.addValueEventListener(new ValueEventListener() {
            @Override

            public void onDataChange(DataSnapshot dataSnapshot) {

                final Admin admin = dataSnapshot.getValue(Admin.class);
                arr.add(admin.getAdmin_colony());
                adapter = new ArrayAdapter<>(ListOfAreasActivity.this,
                        android.R.layout.simple_list_item_1, android.R.id.text1, arr);
                listView.setAdapter(adapter);
                pd.dismiss();
                listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                        String areaName = (String) parent.getItemAtPosition(position);
                        //findUserIdWithLocation(areaName);

                        SharedPreferences.Editor editor = getSharedPreferences("shared_prefs", MODE_PRIVATE).edit();
                        editor.putString("area_name", areaName);
                        editor.apply();
                        editor.commit();
                        Intent intent = new Intent(ListOfAreasActivity.this, MainActivity.class);
                        startActivity(intent);
                        finish();
                    }
                });

            }


            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });


    }

Based on your comment, the areaUid can be retrieved from the showListOfAreas 's parameter

private void showListOfAreas(final String areaUid) {

    ...

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String areaName = (String) parent.getItemAtPosition(position);

            // area's UID
            String areaUidAfterClick = areaUid;

            SharedPreferences.Editor editor = getSharedPreferences("shared_prefs", MODE_PRIVATE).edit();
            editor.putString("area_name", areaName);
            editor.apply();
            editor.commit();
            Intent intent = new Intent(ListOfAreasActivity.this, MainActivity.class);
            startActivity(intent);
            finish();
        }
    });

    ...

}

Let me know if this is not what you meant.

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