Firebase onDataChange不在片段中调用(这可以与另一个片段中的代码相同吗?)

时间:2020-04-14 03:40:10

标签: android firebase

我正在尝试获取Firebase数据库,但是一个片段可以获取数据,而另一个片段甚至不能调用onDataChange。我在猜测是否在另一个片段中打开了DB,也许我无法再次打开它。这只是我的猜想..如果我的猜想是正确的,请让我知道如何关闭它或解决此问题?相同的代码可用于另一个片段,另一个片段是第一个称为片段的片段,因此我认为数据库结构没有问题。

这不是工作代码。我看到有人说要把读取的数据库代码放在onViewCreated而不是onCreateView中,但仍然无法正常工作。

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_about, container, false);
        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        TextView textView = view.findViewById(R.id.txtSlogan);
        Button payNow = view.findViewById(R.id.btnPay);
        Myuser_pay = new UserModel();
        String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

        FirebaseDatabase.getInstance().getReference().child("users").child(uid).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                Myuser_pay = dataSnapshot.getValue(UserModel.class);
                paiduser = Myuser_pay.paid;
                Toast.makeText(getActivity(),"OK",Toast.LENGTH_LONG);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(getActivity(),"Error",Toast.LENGTH_LONG);
            }
        });


        if (paiduser.equals("true")){
            textView.setText("Thank you for your payment. Your account is now fully activated");
        }

        payNow.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                processPayment();
            }
        });

    }

1 个答案:

答案 0 :(得分:0)

经过长时间调试后找到了答案。由于我的for循环正在回收站适配器中使用DB,因此它看起来像是此ID。我所做的是创建了一个静态类,该类可以在用户登录时保存用户数据,并使用该保存的数据来代替再次读取DB。这个简单的修复程序可以解决问题。