簡體   English   中英

如何在Android的Firebase數據庫中獲取具有選定值的節點的密鑰UID?

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

下面是我在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:""

我想實現什么?

考慮到有一個可用的admin_areas列表在同一數據庫的幫助下填充的事實,我想獲取這些區域的AreaUID。 現在,當用戶單擊列表中的項目時,我想獲取其admin_area與從列表中選擇的admin_area匹配的節點的AreaUID。

例如:這是呈現給用戶的區域列表-

1)地區1

2)地區2

3)地區3

4)地區4

當用戶點擊區域2時,我想獲取其AreaUid。我該怎么做? 下面是一些代碼供參考

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

            }
        });


    }

根據您的評論,可以從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();
        }
    });

    ...

}

讓我知道這是否不是您的意思。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM