Incrementare automaticamente un valore in Firebase

Come faccio ad aumentare automaticamente un valore memorizzato in Firebase da un client Android?

Attualmente: dichiaro int id = 1 . Quando incremento, vedo che i valori 2, 3 etc. vengono memorizzati. Va bene, ma quando riesco a eseguire il progetto, l' id è impostato nuovamente su 1.

  • Ignorare i test dell'unità Android a seconda del livello SDK
  • Accesso ai beni di altre applicazioni Android su Jelly Bean
  • Il test dell'unità Android non viene ingannato
  • Come controllare il stream di attività - il button Indietro rispetto al button Home
  • Layout Android - layoutweight e weightsum
  • Android: java.io.IOException: Il nome host non è stato verificato
  • Voglio che si comporti come una variabile statica, quindi posso creare un id che andrà da 1 a infinito senza ripristinare.

    AGGIORNAMENTO FATTO

    Ho usato quanto segue per passare il riferimento Firebase e una string all'incremento incrementCounter.

     if(language_chosen.equalsIgnoreCase("english")) { Firebase publRef = f.child("Language").child("English").child("Message"); Firebase newPublRef = publRef.push(); writeMsgActivity demo = new writeMsgActivity(); demo.incrementCounter(newPublRef,the_msg_enter); } 

    Ora cerco di utilizzare il riferimento passato e la string a public void incrementCounter(Firebase publref,String my_msg) nel metodo oncomplete ma mi dà un errore.

      public void incrementCounter(Firebase publref,String my_msg) { publref.runTransaction(new Transaction.Handler() { @Override public Transaction.Result doTransaction(final MutableData currentData) { if (currentData.getValue() == null) { currentData.setValue(1); } else { currentData.setValue((Long) currentData.getValue() + 1); } return Transaction.success(currentData); } public void onComplete(FirebaseError firebaseError, boolean committed, DataSnapshot currentData) { if (firebaseError != null) { System.out.println("Firebase counter increment failed."); } else { System.out.println("Firebase counter increment succeeded."); Map<String, Object> publ = new HashMap<String, Object>(); publ.put("pubMsg", my_msg); publ.put("id",currentData); publref.setValue(publ); } } }); } 

    AGGIORNATO SOLVATO

      final Firebase upvoteref = new Firebase("https://shareurday.firebaseio.com/Message/"+msg_id+"/upvotes"); upvoteref.runTransaction(new Transaction.Handler() { @Override public Transaction.Result doTransaction(final MutableData currentData) { if (currentData.getValue() == null) { currentData.setValue(1); } else { currentData.setValue((Long) currentData.getValue() + 1); } return Transaction.success(currentData); } public void onComplete(FirebaseError firebaseError, boolean committed, DataSnapshot currentData) { if (firebaseError != null) { System.out.println("Firebase counter increment failed."); } else { System.out.println("Firebase counter increment succeeded."); } } }); 

    La variabile msg_id è l'id random generato dalla spinta.

  • Robusto modo per passare il valore da Dialog a Activity su Android?
  • ViewPager con il layout del coordinatore
  • Acquisti multipli di Android in-app
  • Puoi aggiungere una sottocartella al layout in un progetto Android Eclipse?
  • aggiungere l'elemento alle impostazioni in framework android
  • Gridview con due colonne e immagini ridimensionate automaticamente
  • One Solution collect form web for “Incrementare automaticamente un valore in Firebase”

    Ecco un metodo di esempio che incrementa un singolo contatore. L'idea fondamentale è che tu sia creando la voce (impostandola uguale a 1) o mutando la voce esistente. L'utilizzo di una transazione consente di assicurare che se più client tentano di incrementare il contatore contemporaneamente, tutte le richieste successivamente verranno eseguite. Dalla documentazione Firebase (enfasi mine):

    Utilizza la funzionalità delle transactions quando si lavora con dati complessi che potrebbero essere danneggiati da aggiornamenti concorrenti

     public void incrementCounter() { firebase.runTransaction(new Transaction.Handler() { @Override public Transaction.Result doTransaction(final MutableData currentData) { if (currentData.getValue() == null) { currentData.setValue(1); } else { currentData.setValue((Long) currentData.getValue() + 1); } return Transaction.success(currentData); } @Override public void onComplete(FirebaseError firebaseError, boolean committed, DataSnapshot currentData) { if (firebaseError != null) { Log.d("Firebase counter increment failed."); } else { Log.d("Firebase counter increment succeeded."); } } }); } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.