java - Firebase 参考获取总是最后一个用户被创建 android studio
问题描述
我正在做我的项目以研究 android 应用程序开发,我在获取已登录的 currentUser 并在 TextView 上显示他的名字时遇到问题。似乎它总是向我显示创建的最后一个用户,无论我使用哪个用户登录
这是java文件:
public class ActionsFragment extends Fragment {
FirebaseAuth auth;
Button acManagmentBtn;
TextView tvName;
public ActionsFragment() {
// Required empty public constructor
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
DatabaseReference managerRef = reference.child("Users").child("Manager");
managerRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
reference.child(FirebaseAuth.getInstance().getCurrentUser().getUid());
Manager manager = ds.getValue(Manager.class);
tvName.setText(manager.getName());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
// Toast.makeText(getActivity(), "Null שם פרטי", Toast.LENGTH_SHORT).show();
}
});
auth = FirebaseAuth.getInstance();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_actions, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
tvName = view.findViewById(R.id.tv_name);
acManagmentBtn = view.findViewById(R.id.manage_ac_btn);
acManagmentBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), AcManagmentActivity.class);
startActivity(intent);
}
});
}
}
这是我的 firebase 实时数据库中的树:
感谢您的帮助!
解决方案
Firebase 参考始终获取最后一个创建用户
这是正常行为,因为您tvName
在 for 循环的每次迭代中都将管理器的名称设置为 TextView,这意味着只会设置最后一个管理器名称,因为它是最后一次迭代。所以请记住,当涉及到来自多个用户的数据时,简单的 TextView 不是正确的选择,相反,您应该使用可以容纳多个项目的 View。一个可能的解决方案可能是 ListView,或者为什么不,甚至更好的是 RecyclerView。为此,我建议您从以下帖子中查看我的答案:
推荐阅读
- tcl - 无法使用包 - Windows 上的 TCL 9.0 和 tcllib1.20
- java - Spring Security - 使用授权标头进行身份验证
- r - R 包组织
- python - pygame 输入和运动平滑
- amazon-web-services - 通过 AWS CLI 查找 Beanstalk VPC-ID
- gstreamer - 将 EOS 发送到包含 webrtcbin 和 appsrc 的管道
- reactjs - Spotify 隐式流教程,token 为空
- sql - 受值限制 Postgresql 查询
- vue.js - 升级到 Vue 3:将数据和方法放在哪里?
- php - Laravel Postgres 多模式数据库迁移