简体   繁体   English

从 firestore 检索当前用户数据并在另一个查询中使用它

[英]retrieving the current user data from firestore and use it in another query

I have two users admin and faculty.我有两个用户管理员和教职员工。 admin user can add and retrieve faculty data.管理员用户可以添加和检索教师数据。 database format for admin is admin database and faculty database is faculty database .Basically I want admin access faculty data of its department.example-The admin which have MCA department then he can only access faculty data of MCA department only.管理员的数据库格式是管理员数据库,教员数据库是教员数据库。基本上我希望管理员访问其部门的教员数据。示例-拥有 MCA 部门的管理员只能访问 MCA 部门的教员数据。

public class userfaculty extends Fragment {
FirebaseFirestore fStore;
private FirebaseAuth fAuth;
RecyclerView mFirestoreList;
FirestorePagingAdapter adapter;
String admindept,adminid;
Query query;

private UserfacultyViewModel mViewModel;

public static userfaculty newInstance() {
    return new userfaculty();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    FloatingActionButton fab = view.findViewById(R.id.fabuserfaculty);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(getContext(), AdminAddUserFaculty.class));
        }
    });
    fStore=FirebaseFirestore.getInstance();
    fAuth=FirebaseAuth.getInstance();
    mFirestoreList=view.findViewById(R.id.RVuserfaculty);
    //get current user department
    adminid=fAuth.getCurrentUser().getUid();
    fStore.collection("Admin").document(adminid).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            admindept= documentSnapshot.getString("Department");
            Log.i("Admindept",admindept);
        }
    });

'here I want to use retrieved current user department for accessing data' '这里我想使用检索到的当前用户部门来访问数据'

    //divider decoration
    DividerItemDecoration dividerItemDecoration=new 
    DividerItemDecoration(getContext(),DividerItemDecoration.VERTICAL);
    dividerItemDecoration.setDrawable(getResources().getDrawable(R.drawable.recyclerview_divider));
    mFirestoreList.addItemDecoration(dividerItemDecoration);

    //Query
    query = fStore.collection("Faculty").doument("admindept").collection("Teachers");

    PagedList.Config config=new PagedList.Config.Builder()
            .setInitialLoadSizeHint(10)
            .setPageSize(3)
            .build();
    //RecyclerOptions
    FirestorePagingOptions<FacultyModelA> options=new FirestorePagingOptions.Builder<FacultyModelA>()
            .setLifecycleOwner(this)
            .setQuery(query, config, new SnapshotParser<FacultyModelA>() {
                @NonNull
                @Override
                public FacultyModelA parseSnapshot(@NonNull DocumentSnapshot snapshot) {
                    FacultyModelA facultyModelA=snapshot.toObject(FacultyModelA.class);
                    return facultyModelA;
                }
            })
            .build();

    adapter=new FirestorePagingAdapter<FacultyModelA, FacultyViewHolder>(options) {

        @NonNull
        @Override
        public FacultyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View v=LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_single_admin_faculty,parent,false);
            return new FacultyViewHolder(v);
        }


        @Override
        protected void onBindViewHolder(@NonNull FacultyViewHolder holder, int position, @NonNull FacultyModelA model) {
            holder.list_name.setText(model.getName());
        }

        @Override
        protected void onLoadingStateChanged(@NonNull LoadingState state) {
            super.onLoadingStateChanged(state);
            switch (state){

                case LOADING_INITIAL:
                    Log.d("PAGING_LOG","All inintial data");
                    break;
                case LOADING_MORE:
                    Log.d("PAGING_LOG","All next page");
                    break;
                case FINISHED:
                    Log.d("PAGING_LOG","All data loaded");
                    break;
                case ERROR:
                    Log.d("PAGING_LOG","Error Loading Data");
                    break;
                case LOADED:
                    Log.d("PAGING_LOG","Total Item Loaded: "+getItemCount());
                    break;
            }
        }
    };
    mFirestoreList.setHasFixedSize(true);
    mFirestoreList.setLayoutManager(new LinearLayoutManager(getContext()));
    mFirestoreList.setAdapter(adapter);

}
class FacultyViewHolder extends RecyclerView.ViewHolder{

    private TextView list_name;

    public FacultyViewHolder(@NonNull View itemView) {
        super(itemView);

        list_name=itemView.findViewById(R.id.list_fname);

    }
}

}

'But at this line, I got a null pointer Exception' '但是在这一行,我得到了一个 null 指针异常'

    query = fStore.collection("Faculty").doument(admindept).collection("Teachers");

What changes should I do...Thank you in advance.我应该做些什么改变......提前谢谢你。

Your document name in code is "admindept" but in the screenshot it's "MCA".您在代码中的文档名称是“admindept”,但在屏幕截图中是“MCA”。 Fix that and you may get it to work.修复它,你可能会让它工作。

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

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