Cómo guardar la puntuación de los usuarios en firebase y recuperarla en tiempo real en el estudio de Android

Estoy creando una aplicación en la que los puntos aumentan al hacer clic y esos puntos se deben guardar en la base de fuego. Logré guardar esos datos en Firebase. Pero cuando destruyo mi aplicación y la vuelvo a abrir, el valor de los puntos se muestra igual pero luego de hacer clic en el botón. De nuevo comienza desde 0.

Por ejemplo: cada vez que se presiona el botón, el valor de los puntos aumenta a 10 puntos. Ahora cuando destruyo por completo la aplicación y la vuelvo a abrir, el valor de los puntos se muestra igual, pero cuando se presiona el botón nuevamente comienza desde la condición inicial.

Aquí está mi código

int amount = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); button_claim.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { amount = amount + 100; textView_points.setText(String.valueOf(amount)); databaseReference.setValue(textView_points.getText().toString()); } }); } @Override protected void onStart() { super.onStart(); if (mAuth.getCurrentUser() == null) { finish(); Intent main = new Intent(this,MainActivity.class); main.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(main); } databaseReference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { textView_points.setText(dataSnapshot.getValue(String.class)); databaseReference.setValue(textView_points.getText().toString()); } @Override public void onCancelled(DatabaseError databaseError) { Toast.makeText(Main2Activity.this,"error",Toast.LENGTH_LONG).show(); } }); } 

Antes de destruir la aplicación, vea la imagen, los puntos aumentan al hacer clic en el botón antes de destruir la aplicación y cargarla en la base de datos. Consulte la imagen 1.

Nueva aplicación abierta (después del cierre) muestra el mismo punto actualizado , ver imagen 2

Ahora, cuando hago clic en reclamar, vuelve a 100 , vea la imagen número 3

por favor ayúdame en este problema, y ​​soy un novato Gracias

Así es como configuras un valor en tu base de datos de Firebase:

 DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); rootRef.child("score").setValue(1); 

Suponiendo que su campo de score es de tipo entero, para resolverlo, utilice el siguiente método:

 public static void setScore(String operation) { DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); DatabaseReference scoreRef = rootRef.child("score"); scoreRef.runTransaction(new Transaction.Handler() { @Override public Transaction.Result doTransaction(MutableData mutableData) { Integer score = mutableData.getValue(Integer.class); if (score == null) { return Transaction.success(mutableData); } if (operation.equals("increaseScore")) { mutableData.setValue(score + 1); } else if (operation.equals("decreaseScore")){ mutableData.setValue(score - 1); } return Transaction.success(mutableData); } @Override public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {} }); } 

Para esto, te recomiendo que definitivamente uses transactions . Evitará resultados incorrectos si los usuarios intentan boost / disminuir el puntaje al mismo tiempo. Por lo tanto, como conclusión, llame a este método de acuerdo con su operación de aumento / disminución.

Así es como puedes leerlo:

 DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); DatabaseReference scoreRef = rootRef.child("score"); ValueEventListener eventListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Integer score = ds.getValue(Integer.class); Log.d("TAG", score + ""); } @Override public void onCancelled(DatabaseError databaseError) {} }; scoreRef.addListenerForSingleValueEvent(eventListener); 

Primero debe obtener el valor del puntaje anterior y luego agregarlo con el puntaje actual y luego actualizar el valor final en la base de datos de firebase.

 question_score.child("score").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { String previousScore = dataSnapshot.getValue(String.class); if (previousScore!=null){ int finalScore = Integer.parseInt(previousScore) + current_score; question_score.child("score").setValue(String.valueOf(finalScore)); } } @Override public void onCancelled(DatabaseError databaseError) { } });