如何通过android中的firebase为访客提供访问权限

时间:2017-07-25 03:35:41

标签: android firebase firebase-realtime-database firebase-authentication

我正在尝试以访客身份登录用户,这意味着他只能查看任何内容但不能与任何内容进行交互。我这样做有些问题。

首先,我使用了匿名登录,因此完全可以登录用户。

现在我希望用户从areaUID列表中进行选择,以查看该特定区域的详细信息

我的数据库看起来像这样,

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:""

等等。

现在我想向用户显示位于不同AreaUids中的几个admin_area的列表。我正在使用FirebaseRecyclerAdapter,我需要帮助实现上述问题。我希望用户能够查看他/她选择的特定区域的所有图库图像和事件。

mDbRef = FirebaseDatabase.getInstance().getReference().child("Areas");
allAreaUids = new ArrayList<>();
ValueEventListener listener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {

            //This is where i want to populate my arraylist with all the AreaUids. How do i do it?
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // Getting Post failed, log a message
        System.out.println(databaseError.toException());
        // ...
    }
};
mDbRef.addValueEventListener(listener);

adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, android.R.id.text1, allAreaUids);

ListView listView = (ListView) findViewById(R.id.list_of_areas);
listView.setAdapter(adapter);

My Areas类(注意构造函数以及getter和setters方法也存在

public class Areas {

    private Events Events;
    private GalleryPics Gallery;
    private Admin Admin;

    public Areas(){

    }


        .
        . 
        . 

}

1 个答案:

答案 0 :(得分:0)

要显示特定区域的Events,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference areasRef = rootRef.child("Areas");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String areaUid = ds.getKey();

            DatabaseReference eventsRef = rootRef.child("Areas").child(areaUid).child("Events");
            ValueEventListener valueEventListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot child : dataSnapshot.getChildren()) {
                        String event_name = child.child("event_name").getValue(String.class);
                        Log.d("TAG", event_name);
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {}
            };
            eventsRef.addListenerForSingleValueEvent(valueEventListener);

        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
areasRef.addListenerForSingleValueEvent(eventListener);

以同样的方式,您可以获得特定区域的所有Gallery