0

I want to retrieve the like counter and want to upload result on firebase database. if another user likes the post the like counter should increment the value rather than starting from 0.

DatabaseLOLCounter.child(post_key).child(mAuth.getCurrentUser().getUid()).child("counter").setValue('like counter value here'); 

below is my viewholder

viewHolder.mLOL.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { processLOL=true; DatabaseFacepalm.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue(); DatabaseAngry.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue(); DatabaseNeutral.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue(); DatabaseLOL.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (processLOL) { if(dataSnapshot.child(post_key).hasChild(mAuth.getCurrentUser().getUid())) { //Toast.makeText(MainActivity.this,mAuth.getCurrentUser().getUid(),Toast.LENGTH_LONG).show(); //if already reacted //DatabaseLOLCounter.setValue(Count = Count - 1 ); updateLOLCounter(false,post_key); DatabaseLOL.child(post_key).child(mAuth.getCurrentUser().getUid()).removeValue(); processLOL=false; } else { //if no react updateLOLCounter(true,post_key); //DatabaseLOLCounter.setValue(Count = Count + 1 ); DatabaseLOL.child(post_key).child(mAuth.getCurrentUser().getUid()).setValue("lol"); processLOL=false; } } } @Override public void onCancelled(DatabaseError databaseError) { } }); } }); 

In update lolCounter I'm using the inTransaction manager butI dont know how to retrieve sesults and how to store it in data base, I've tried but it's not working, please correct me.

 private void updateLOLCounter(final boolean increment, final String post_key) { DatabaseLOLCounter.runTransaction(new Transaction.Handler() { @Override public Transaction.Result doTransaction(MutableData mutableData) { if (mutableData.getValue() != null) { int value = mutableData.getValue(Integer.class); if(increment) { value++; } else { value--; } mutableData.setValue(value); } return Transaction.success(mutableData); } @Override public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) { // Is the below method is right? DatabaseLOLCounter.child(post_key).child(mAuth.getCurrentUser().getUid()).child("counter").setValue(dataSnapshot); // Toast.makeText(MainActivity.this,dataSnapshot,Toast.LENGTH_LONG).show(); // Transaction completed //Log.d(TAG, "likeTransaction:onComplete:" + databaseError); } }); } 

The console is giving me error "TransactionTooLargeException"

2 Answers 2

1

TransactionTooLargeException happens when passing a too much data on the intent between activities. It is not related to Firebase. Here you can read more.

Sign up to request clarification or add additional context in comments.

1 Comment

any solution to my problem?
0

TransactionTooLargeException is thrown when huge amount of data is getting exchanged between a service and an application. This also can occur, when you pass lot of data through intent extras.

To handle this exception you need analyze your code. If possible, try to split the big operation in to small chunks. Also, try not to exchange huge data (>1MB) between services and application.

See more details of TransactionTooLargeException.

1 Comment

Did my answer helped you?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.