java - 从 firestore 检索当前用户数据并在另一个查询中使用它
问题描述
我有两个用户管理员和教职员工。管理员用户可以添加和检索教师数据。管理员的数据库格式是管理员数据库,教员数据库是教员数据库。基本上我希望管理员访问其部门的教员数据。示例-拥有 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);
}
});
'这里我想使用检索到的当前用户部门来访问数据'
//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);
}
}
}
'但是在这一行,我得到了一个空指针异常'
query = fStore.collection("Faculty").doument(admindept).collection("Teachers");
我应该做些什么改变......提前谢谢你。
解决方案
您在代码中的文档名称是“admindept”,但在屏幕截图中是“MCA”。修复它,你可能会让它工作。
推荐阅读
- c++ - 修改 const std::vector 的元素
通过 const_cast - r - 如何通过聚合 R 中的二进制项来创建新变量?
- tensorflow - 如何使用 FFT 和神经网络对声音进行分类?我应该使用 CNN 还是 RNN?
- ruby-on-rails - Rspec突然只运行一项测试
- sql-server - 如何将数据从多个表插入到 SSIS 中的单个表中?
- java - 有没有办法在点的末尾添加一个字符串而不手动输入它?
- php - 捕获错误 PHP/Apache 后继续执行
- matlab - 创建一个特殊的对角矩阵
- javascript - 将循环 jinja 类中特定类的数据发送到模态
- google-cloud-storage - Google DataProc Presto:如何将 Presto 查询结果写入谷歌云存储?