简体   繁体   English

如何在Android的Firebase数据库中获取具有选定值的节点的密钥UID?

[英]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 下面是我在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. 考虑到有一个可用的admin_areas列表在同一数据库的帮助下填充的事实,我想获取这些区域的AreaUID。 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. 现在,当用户单击列表中的项目时,我想获取其admin_area与从列表中选择的admin_area匹配的节点的AreaUID。

For eg) Here is a list of areas presented to the user - 例如:这是呈现给用户的区域列表-

1)Area 1 1)地区1

2)Area 2 2)地区2

3)Area 3 3)地区3

4)Area 4 4)地区4

When the user taps on Area 2 i want to fetch its AreaUid.How do i do this? 当用户点击区域2时,我想获取其AreaUid。我该怎么做? 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 根据您的评论,可以从showListOfAreas的参数中检索areaUid

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. 让我知道这是否不是您的意思。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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