Данные загружаются из Firebase асинхронно. Любой код, которому нужны данные, должен быть внутри onDataChange
, который вызывается при загрузке данных.
Так что-то вроде:
private void incrementDay(){
db_total = FirebaseDatabase.getInstance().getReference("Total Days");
db_total.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
getTotal = (long)dataSnapshot.getValue();
setTotal=getTotal+1;
db_total.setValue(setTotal);
Snackbar.make(findViewById(android.R.id.content),"Days updated",Snackbar.LENGTH_SHORT).show();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException();
}
});
}
Но учтите, что вы обновляете значение базы данных на основе ее текущего значения. Если два пользователя делают это почти в одно и то же время, только одна из их записей попадет в базу данных. Вот почему вы всегда должны помещать такие обновления в транзакцию Firebase.
Что-то вроде:
db_total.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData current) {
long count = current.getValue(Long.class);
mutableData.setValue(count + 1);
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean b,
DataSnapshot dataSnapshot) {
// Transaction completed
Log.d(TAG, "updating count:" + databaseError);
}
});