2017-05-14 9 views
0

私はfirebaseを使用しています。私は自分のアプリケーションを構築するために先に進む必要があるすべてを得るために6か月間働いていますが、ボタンをクリックするたびに子の値が増えます。EX:値をクリックすると0が表示されます。別のクリックをクリックすると値が1などになるはずですが、以下の方法を使用しています何も働かないので、今私の質問のための簡単な答えを得るために頼む必要があります。Firebaseは、子供の価値を高めることはできません

まず方法:

mDatabase.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      Long Value = (Long) dataSnapshot.child("Rank").getValue(); 
      mDatabase.child("Rank").setValue(Value+1); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

そして第二:

mDatabase.child("Rank").setValue(+1);

しかし、これらすべては動作しません。

mDatabaseMostActive.child("Rank").addListenerForSingleValueEvent(new ValueEventListener() { 
@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    Long Num =(Long) dataSnapshot.getValue(); 
    Long NumAfter = Num+1; 
    dataSnapshot.getRef().setValue(NumAfter);} 
@Override 
public void onCancelled(DatabaseError databaseError) {}}); 

は、それが助け、将来visitosホープ:

+0

こんにちは、私はこのような問題があり、書き込み権限がデータベース設定でうまく設定されていないと、このような問題が発生する可能性があることに注意してください。アクセス許可を確認して、これが動作するかどうかを教えてください –

+0

いいえ、それは弟を働かせません。 – 7uthaifah

答えて

-2

まず質問に答えるためのアレックス・マモの感謝との答えは完璧だったが、私は使用して、より良い方法を見つける「addListenerForSingleValueEvent」方法は、ここに私の完全方法です。

1

私たちは、私はあなたがこのようなトランザクションを使用してrecomand値増加について話している:

mDatabase.child("Rank").runTransaction(new Transaction.Handler() { 
    @Override 
    public Transaction.Result doTransaction(final MutableData currentData) { 
    if (currentData.getValue() == null) { 
     currentData.setValue("0"); 
    } else { 
     String stringValue = (String) currentData.getValue(); 
     int intValue = Integer.parseInt(stringValue); 
     int increasedIntValue = intValue + 1; 
     currentData.setValue(String.valueOf(increasedIntValue)); 
    } 
     return Transaction.success(currentData); 
    } 

    @Override 
    public void onComplete(DatabaseError databaseError, boolean committed, DataSnapshot currentData) { 
     if (databaseError != null) { 
      System.out.println("Firebase counter increment failed!"); 
     } else { 
      System.out.println("Firebase counter increment succeeded!"); 
     } 
    } 
}); 

別approchを、7uthaifahは、後述するように、このです問題を解決するこの方法をよりよく理解するでしょう。

mDatabaseMostActive.child("Rank").addListenerForSingleValueEvent(new ValueEventListener() { 
           @Override 
           public void onDataChange(DataSnapshot dataSnapshot) { 
            Long Num =(Long) dataSnapshot.getValue(); 
            Long NumAfter = Num+1; 
            dataSnapshot.getRef().setValue(NumAfter);} 
           @Override 
           public void onCancelled(DatabaseError databaseError) {}}); 

はそれが役に立てば幸い:

+0

それが動作するかどうかチェックしてみてください。ちょっと待ってください... – 7uthaifah

+0

申し訳ありません兄弟はうまくいきません常に-1の値しか与えません – 7uthaifah

+0

-1を取得した場合、あなたの 'DatabaseReference'が間違っている可能性があります。あなたのデータベース構造を投稿できますか? –

関連する問題