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