3

I am creating a voting app. A Firebase database counts the number of clicks of a button and displays it. However on closing the app and restarting, the number of clicks start back from zero. How can I keep adding the number the votes to the child node even after the app is closed and restarted instead of starting the votes from zero?

mainactivity.java

public class Main2Activity extends AppCompatActivity {
private Firebase mRootRef;
private Button mBtn1;
private Button mBtn2;
int counter = 0;
int counter1 = 0;



@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Firebase.setAndroidContext(this);
mBtn1 = (Button) findViewById(R.id.btn1);
mBtn2 = (Button) findViewById(R.id.btn2);
mBtn1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (v.equals(mBtn1)) {
            mRootRef = new Firebase("https://voting-cf0fa.firebaseio.com/House/Jupiter/Player 1");
            Firebase mRefChild = mRootRef.child("Votes");
            counter++;
            mRefChild.setValue(counter);
            MediaPlayer click1 =MediaPlayer.create(getApplicationContext(), R.raw.click);
            click1.start();
            mBtn1.setEnabled(false);
            mBtn2.setEnabled(false);
            Timer buttonTimer = new Timer();
            buttonTimer.schedule(new TimerTask() {

                @Override
                public void run() {
                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            mBtn1.setEnabled(true);
                            mBtn2.setEnabled(true);
                        }
                    });
                }
            }, 5000);
            final AlertDialog.Builder Voted = new AlertDialog.Builder(Main2Activity.this);
            Voted.setTitle("Voted");
            Voted.setMessage("You have cast Your Vote!");
            Voted.setCancelable(false);
            final AlertDialog dlg = Voted.create();
            dlg.show();

            final Timer t = new Timer();
            t.schedule(new TimerTask() {
                @Override
                public void run() {
                    dlg.dismiss();
                    t.cancel();
                }
            }, 5000);
        }

    }
});


mBtn2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        mRootRef = new Firebase("https://voting-cf0fa.firebaseio.com/House/Jupiter/Player 2");
        if (v.equals(mBtn2)) {
            Firebase mRefChild = mRootRef.child("Votes");
            counter1++;
            mRefChild.setValue(counter1);
            MediaPlayer click2 =MediaPlayer.create(getApplicationContext(), R.raw.click);
            click2.start();
            mBtn2.setEnabled(false);
            mBtn1.setEnabled(false);
            Timer buttonTimer = new Timer();
            buttonTimer.schedule(new TimerTask() {

                @Override
                public void run() {
                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            mBtn2.setEnabled(true);
                            mBtn1.setEnabled(true);
                        }
                    });
                }
            }, 5000);
            final AlertDialog.Builder Voted = new AlertDialog.Builder(Main2Activity.this);
            Voted.setTitle("Voted");
            Voted.setMessage("You Have cast your Vote");
            Voted.setCancelable(false);
            final AlertDialog dlg = Voted.create();
            dlg.show();

            final Timer t = new Timer();
            t.schedule(new TimerTask() {
                @Override
                public void run() {
                    dlg.dismiss();
                    t.cancel();
                }
            }, 5000);

        }
        }
    });
}
@Override
public void onBackPressed() { }

}
AL.
  • 36,815
  • 10
  • 142
  • 281
Abhi
  • 3,431
  • 1
  • 17
  • 35
  • If you're looking to only store the data locally, use SharedPreferences.....otherwise use a database.This link will provide the info you want http://stackoverflow.com/q/10962344/7012517 – Shobhit Feb 05 '17 at 15:10
  • Actually I want to store the data on Firebase. I just don't want to lose the data everytime the app closes. – Abhi Feb 05 '17 at 15:18

1 Answers1

3

From the Firebase documentation :

Use our transactions feature when working with complex data that could be corrupted by concurrent updates

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.");
        }
    }
});
}
Shobhit
  • 1,096
  • 11
  • 30