'Firebase adapter is not updating the data according to my needs
My app have some users stored in firebase realtime database, each user have have a node "showGigCount" which should update if someone clicks on that user. The problem: If User 1 click on the data of User 2 then the showGigCount for User 1 will be incremented by 1 and showGigCount of User 2 will be decremented by 1. As you can see in the code I can successfully update the value of showGigCount for User 1 but the value of User 2 is not changing. Any suggestions would be highly appreciated. Below is my code. Thank You all
DashboardActivity
fAuth = FirebaseAuth.getInstance();
firebaseDatabase = FirebaseDatabase.getInstance();
dRef = FirebaseDatabase.getInstance().getReference("Users");
if(fAuth.getCurrentUser() != null){
UID = FirebaseAuth.getInstance().getCurrentUser().getUid();
}
dRef.child(UID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
remainingClicks = Integer.parseInt(String.valueOf(snapshot.child("clicksRemain").getValue()));
showGigCount = Integer.parseInt(String.valueOf(snapshot.child("showGigCount").getValue()));
String username = String.valueOf(snapshot.child("name").getValue());
clicks.setText(String.valueOf(remainingClicks));
userName.setText(username);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
recyclerView = findViewById(R.id.dashboardRCV);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
LoadData();
}
private void LoadData() {
// This will display the data of a user if his showGigCount is greater than 0.
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = db.child("Users");
Query queryByShowGigCount = usersRef.orderByChild("showGigCount").startAt(1);
options = new FirebaseRecyclerOptions.Builder<ModelClass>()
.setQuery(queryByShowGigCount, ModelClass.class)
.build();
adapter = new FirebaseRecyclerAdapter<ModelClass, MyViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull MyViewHolder holder, int position, @NonNull ModelClass model) {
holder.previewLink.setURL(model.getGig(), new URLEmbeddedView.OnLoadURLListener() {
@Override
public void onLoadURLCompleted(URLEmbeddedData data) {
holder.previewLink.title(data.getTitle());
holder.previewLink.description(data.getDescription());
holder.previewLink.host(data.getHost());
holder.previewLink.thumbnail(data.getThumbnailURL());
holder.previewLink.favor(data.getFavorURL());
}
});
String user_clicked = getRef(position).getKey();
if (user_clicked.equals(UID)){
holder.previewLink.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("if1 working", "it's showing the data");
Toast.makeText(DashboardActivity.this, "Opening your link is not allowed", Toast.LENGTH_LONG).show();
}
});
}else if (!user_clicked.equals(UID)){
holder.previewLink.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Online User", "Online user clicking");
if (remainingClicks >= 1) { // This code increment the showGigCount of User 1 by 1.
remainingClicks--;
showGigCount ++;
clicks.setText(String.valueOf(remainingClicks));
UserClicksCounts();
UserShowGigCounts();
// I wrote this code so that showGigCount of User 2 will be decreased by 1 but it's not working
dRef.child(String.valueOf(user_clicked)).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
showGigCount--;
UserGigCountDecrease();
Log.d("CLicked User", "showGigCount decreased");
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
} else if (remainingClicks == 0){
zeroClicks.setVisibility(View.VISIBLE);
}
}
});
}
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_layout, parent, false);
return new MyViewHolder(view);
}
};
adapter.startListening();
recyclerView.setAdapter(adapter);
}
void UserClicksCounts(){
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("Users").child(UID);
myRef.child("clicksRemain").setValue(remainingClicks);
}
// This will count how many times the gig will be shown to the user
void UserShowGigCounts(){
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("Users").child(UID);
myRef.child("showGigCount").setValue(showGigCount);
void UserGigCountDecrease(){
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("Users").child(user_clicked);
myRef.child("showGigCount").setValue(showGigCount);
}
MyViewHolder Class
public MyViewHolder(@NonNull @NotNull View itemView) {
super(itemView);
previewLink = itemView.findViewById(R.id.uev);
geglink = (TextView) itemView.findViewById(R.id.rcvGigLink);
userName = (TextView) itemView.findViewById(R.id.rcvName);
userAbout = (TextView) itemView.findViewById(R.id.rcvAbout);
v = itemView;
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|

