Firebase 参考获取总是最后一个用户被创建 android studio

Posted

技术标签:

【中文标题】Firebase 参考获取总是最后一个用户被创建 android studio【英文标题】:Firebase reference get always the last user was created android studio 【发布时间】:2020-09-28 23:00:03 【问题描述】:

我正在做我的项目以研究 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 实时数据库中的树:

link to the database tree

感谢您的帮助!

【问题讨论】:

您正在等待在数据库中添加一个值 (addValueEventListener) 并显示名称字段。这就是为什么你只能得到最新的名字。 【参考方案1】:

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

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

Showing Firebase data in ListView How can I retrieve data from Firebase to my adapter

【讨论】:

嗨内塔内尔!您是否尝试过我上面的解决方案?如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记(✔️)来接受它。应将颜色更改为绿色。我真的很感激。谢谢!

以上是关于Firebase 参考获取总是最后一个用户被创建 android studio的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 的 .isNewUser 方法总是返回 false

Firebase UID 是不是总是 28 个字符?

如何从 Firebase 获取 PWA 数据

从 Firebase RTD 获取数据时获取 null

使用 Angular 和 Firebase 登录后获取用户配置文件

使用用户 ID 从 Firebase 获取数据