2017-09-08 10 views
1

にFirebaseデータベースノードデータをコピーすることはできません:は、私は単に別に、私は1つのFirebaseの場所に保存されている情報をコピーしようとしています別のノード

 mFollowingCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
      if (b){ 
       mBaseRef.child(USERS_LABEL).child(mUserID).child(FOLLOWING_LABEL).child(USERS_LABEL).child(mPollCreatorID).child(DISPLAY_NAME_LABEL).setValue(mPollCreatorDisplayName); 
       mBaseRef.child(POLL_LABEL).child(pollID).addListenerForSingleValueEvent(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         mBaseRef.child(USERS_LABEL).child(mUserID).child(FOLLOWING_LABEL).child(POLL_LABEL).child(pollID).setValue(dataSnapshot); 
        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 
         Toast.makeText(getContext(), databaseError.getCode(), Toast.LENGTH_LONG).show(); 

        } 
       }); 

      } else { 
       mBaseRef.child(USERS_LABEL).child(mUserID).child(FOLLOWING_LABEL).child(USERS_LABEL).child(mPollCreatorID).child(DISPLAY_NAME_LABEL).removeValue(); 
      } 
     } 
    }); 

私はこのコードを持っている場合は、アプリが簡単にクラッシュされます。ロギングエラーはなく、私が間違っていることを正確に特定することができません。基本的に、私はFirebaseデータをコピーするためのベストプラクティスを知りたいと思います。 onDataChange()

答えて

4

あなたはDataSnapshot、ないDatasnapshotオブジェクト自体を格納する必要があります。

変更:

setValue(dataSnapshot.getValue()); 

setValue(dataSnapshot); 

はまた、Toastを表示するためにあなたのコードが間違っている:

Toast.makeText(getContext(), databaseError.getCode(), Toast.LENGTH_LONG).show(); 

databaseError.getCode()は、あなたが呼び出していることを意味する、intを返します。形態はmakeText()です。文字列リソースIDをpectします。変更:

Toast.makeText(getContext(), databaseError.getMessage(), Toast.LENGTH_LONG).show(); 
+0

パーフェクト、今すぐ正しく動作します。また、私の.onCreateView()メソッドに多数の.addSingleEventListeners()があり、すべてFirebaseデータベース内の異なるノードにリンクされています。複数のリスナーを持つことは問題ありませんか?それとも、ベースノードに1人のリスナーを置いてそこから作業するのがベストプラクティスですか? – tccpg288

+1

コピーするノードごとにリスナーがあることに問題はありません。 –

関連する問題