在我的应用程序中有一个推荐选项,如果推荐代码匹配,我正在使用 firebase 数据库更新钱包,但问题是用户帐户已成功信任,但代理帐户(被引用(多次信任,例如一遍又一遍地连续,这就是问题所在,
public void checkreffercode() {
final String refferalcode = editText.getText().toString();
if (refferalcode.equals("")) {
Toast.makeText(ReferalActivity.this, "Refferal code is empty", Toast.LENGTH_LONG).show();
} else {
final DatabaseReference reffercoderef = FirebaseDatabase.getInstance().getReference().child("Reffercode");
final DatabaseReference agentwallet = FirebaseDatabase.getInstance().getReference();
final DatabaseReference userwalletstat = FirebaseDatabase.getInstance().getReference(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("Refferal");
final DatabaseReference userwallet = FirebaseDatabase.getInstance().getReference(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("walletcoin");
userwalletstat.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String statous = dataSnapshot.getValue(String.class);
if (statous == null) {
Toast.makeText(ReferalActivity.this, "data is null in Refferal", Toast.LENGTH_LONG).show();
} else if (statous.equals("notcredited")) {
//here check all the feild....
reffercoderef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.child(refferalcode).exists()) {
final String Uid = dataSnapshot.child(refferalcode).getValue(String.class);
userwallet.setValue(String.valueOf(5000));
agentwallet.child(Uid).child("walletcoin").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String agentbalance = dataSnapshot.getValue(String.class);
Integer agentbalinint = Integer.parseInt(agentbalance);
Integer updatedbalu = (agentbalinint + 5000);
agentwallet.child(Uid).child("walletcoin").setValue(String.valueOf(updatedbalu));
userwalletstat.setValue("credited");
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(ReferalActivity.this, "error on updating agent balance", Toast.LENGTH_LONG).show();
}
});
} else {
Toast.makeText(ReferalActivity.this, "Refferal code not found", Toast.LENGTH_LONG).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(ReferalActivity.this, "Database error on checking refferal code", Toast.LENGTH_LONG).show();
}
});
//last
} else {
Toast.makeText(ReferalActivity.this, "Both wallet has been credited", Toast.LENGTH_LONG).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(ReferalActivity.this, "Database error on checking account status", Toast.LENGTH_LONG).show();
}
});
}
}
public void updateref(View view) {
Button button=findViewById(R.id.refbutton);
final ProgressDialog progressDialog = new ProgressDialog(ReferalActivity.this);
progressDialog.setMessage("Please wait..");
progressDialog.getActionBar();
progressDialog.setCancelable(false);
progressDialog.show();
checkreffercode();
progressDialog.cancel();
}
这是我的 xml 代码
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Refer code"
android:id="@+id/refercode"
android:inputType="textPersonName"
android:padding="20dp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Update"
android:onClick="updateref"
android:layout_gravity="center"
android:id="@+id/refbutton"
android:textColor="#51122e"/>
您正在userwalletstat
引用中使用ValueEventListener
。问题是,对于ValueEventListener
就是这样,每次在userwalletstat
("引用"(子级下更改值时都会调用它。在 else if (statous.equals("notcredited"))
条件中,您正在使用另一种ValueEventListener
,在该中,您正在设置如下值userwallet.setValue(String.valueOf(5000));
因此,您的第一个 ValueEventListener 被激活,因为它是一个ValueEventListener
。所以你的代码有点像一个回避函数,它很糟糕。因此,为了修复它,您应该将ValueEventListeners
替换为 SingleValueEventListener
.您可以在此处了解有关它们的更多信息,然后向下滚动到一次读取数据部分。
基本上,您需要更换
userwalletstat.addValueEventListener(new ValueEventListener() {
跟
userwalletstat.addListenerForSingleValueEvent(new ValueEventListener() {
并对其他侦听器执行相同的操作,例如:
reffercoderef.addListenerForSingleValueEvent(new ValueEventListener() {
agentwallet.child(Uid).child("walletcoin").addListenerForSingleValueEvent(new ValueEventListener() {
另外,我不知道您的数据结构是如何设置的,但是在侦听器中有一个侦听器并不是一个好主意。也许你应该重新组织你的数据结构。