首页 > 解决方案 > 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 实时数据库中的树:

链接到数据库树

感谢您的帮助!

标签: javaandroiddatabasefirebasereference

解决方案


Firebase 参考始终获取最后一个创建用户

这是正常行为,因为您tvName在 for 循环的每次迭代中都将管理器的名称设置为 TextView,这意味着只会设置最后一个管理器名称,因为它是最后一次迭代。所以请记住,当涉及到来自多个用户的数据时,简单的 TextView 不是正确的选择,相反,您应该使用可以容纳多个项目的 View。一个可能的解决方案可能是 ListView,或者为什么不,甚至更好的是 RecyclerView。为此,我建议您从以下帖子中查看我的答案:


推荐阅读