Stephany.Star
Stephany.Star

Reputation: 49

How to increment value in Firebase database android

Hopefully someone can help me with this. Lets say I have a post and I want to track down the number of clicks it gets. How do I go about incrementing the value in the database (Firebase). For example the post has one click that count as 1 then it has another click that counts as 2 then so on and so fourth. I tried doing something but I'm getting this error. I really need your help on this. Thanks in advance

Error message

Can't convert object of type java.lang.Long to type com.myapp.poopy.Model_Information

My code

databaseReference = FirebaseDatabase.getInstance("https://poopy-43981.firebaseio.com/").getReference().child("Post").child(getid);



  int count;

    count = count ++;

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {


                    databaseReference.child("clicks").setValue(count+1);



                }

                @Override
                public void onCancelled(@NonNull DatabaseError error) {

                }
            });

  
        }
    });

Json

{
  "Post" : {
    "lG71ennq86UIZ5a5Oqh8oaYAXe03" : {
      "-MHNWmVK3rBnvnr0qcph" : {
        "clicks" : 0,
        "id" : "-MHNWmVK3rBnvnr0qcph",
  
        
      }
    }
  },

Model_class

 public Model_Information(String category, String headline, String  mImageUrl,String created,String time,String id,String status ) {

        this.mImageUrl =  mImageUrl;
        this.category = category;
        this.headline = headline;
        this.created=created;
        this.time=time;
        this.id=id;
        this.status=status;
    }

    public Model_Information() {

    }

    public String getstatus() {
        return status;
    }

    public void setstatus(String status) {
        status = status;
    }


    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getCreated() {
        return created;
    }

    public void setCreated(String created) {
        this.created = created;
    }





    public String getmImageUrl() {
        return mImageUrl;
    }

    public void setmImageUrl(String mImageUrl) {
        this.mImageUrl = mImageUrl;
    }


    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    
    public String getHeadline() {
        return headline;
    }

    public void setHeadline(String headline) {
        this.headline = headline;
    }

//Class using model class

 databaseReference.addChildEventListener(new ChildEventListener() {
          @Override
          public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String previousChildName) {



              if (dataSnapshot.exists()) {
                  progressBar.setVisibility(View.GONE);



                  for (DataSnapshot postsnapshot : dataSnapshot.getChildren()) {

                      myUploads.clear();


                      Model_Information upload = postsnapshot.getValue(Model_Information.class);

                      myUploads.add(upload);
                      aAdapter = new Adapter(MainActivity2.this, myUploads);
                      recyclerView.setAdapter(aAdapter);
                      aAdapter.notifyDataSetChanged();
                      recyclerView.invalidate();

                  }

              }

          }

Upvotes: 2

Views: 1768

Answers (1)

Frank van Puffelen
Frank van Puffelen

Reputation: 599571

To be able to update the clicks value you need to know the complete path to that value. In your use-case there seem to be two variables in that path:

  • the UID
  • a push ID

Once you know both values, increment the value can be done with the (relatively new) ServerValue.increment operation like this:

DatabaseReference rootReference = FirebaseDatabase.getInstance("https://poopy-43981.firebaseio.com/");
DatabaseReference userReference = rootReference.child("Post").child(getid);
DatabaseReference countReference = userReference.child("-MHNWmVK3rBnvnr0qcph").child("clicks");

countReference.setValue(ServerValue.increment(1));

Upvotes: 3

Related Questions