2017-08-06 6 views
0

likeカウンタを取得し、firebaseデータベースに結果をアップロードしたいと考えています。別のユーザーがポストを気に入った場合のようなカウンタは、私がinTransactionマネージャブーティを使用していlolCounter値ではなく、更新には0から始まるfirebaseの複数のユーザーのカウントを同じように管理したい

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

私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) { 

          } 
         }); 

       } 
      }); 

は知らないインクリメントすべきですどのようにsesultsを取得する方法とそれをデータベースに格納するには、私は試してみましたが、それは動作していない、私を修正してください。

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); 
     } 
    }); 
} 

コンソールは私にエラー「TransactionTooLargeException」を与えている活動との意図にあまりにも多くのデータを渡すときに

答えて

1

TransactionTooLargeExceptionが起こります。 Firebaseとは関係ありません。 Here you can read more.

+0

私の問題の解決方法はありますか? –

0

TransactionTooLargeExceptionは、サービスとアプリケーションの間で膨大な量のデータが交換されるとスローされます。これは、インテント・エクストラを通じて大量のデータを渡すときにも発生します。

この例外を処理するには、コードを分析する必要があります。可能であれば、大きな操作を小さなチャンクに分割してみてください。また、サービスとアプリケーションの間で膨大なデータ(> 1MB)を交換しないでください。

TransactionTooLargeExceptionの詳細を参照してください。

+0

よく私は別の方法で問題を解決しました –

+0

私の答えはあなたを助けましたか? –

関連する問題