0
データベースのint値をインクリメントするには、まずリスナを使用してその値を取得し、1ずつインクリメントしてから、新しい値をdatabaseに設定します。これはうまくいきますが、もっと簡単な方法があるかどうかを知りたいのです。この方法はあまりにも多くの作業のようです。Firebaseデータベースのインクリメントint
データベースのint値をインクリメントするには、まずリスナを使用してその値を取得し、1ずつインクリメントしてから、新しい値をdatabaseに設定します。これはうまくいきますが、もっと簡単な方法があるかどうかを知りたいのです。この方法はあまりにも多くの作業のようです。Firebaseデータベースのインクリメントint
Firebaseデータベースに値をインクリメント(または他の計算を行う)するサーバ側の方法はありません。
あなたのアプローチはこれを行う方法の1つですが、競合状態に陥る可能性があります。
結果が正しくない可能性があります(使用するケースによって異なります)。
その場合、動作させる1つの方法は、読み取りと書き込みを1つの機能にまとめたFirebaseトランザクションを使用することです。
トランザクションはFirebase Database documentationに記載されています。私はそれを読むことを強く勧めます。そこに費やした数時間は、多くの問題を回避するでしょう。ドキュメントから:
postRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
Long value = mutableData.getValue(Long.class);
if (value == null) {
mutableData.setValue(0);
}
else {
mutableData.setValue(value + 1);
}
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean b,
DataSnapshot dataSnapshot) {
Log.d(TAG, "transaction:onComplete:" + databaseError);
}
});
これはあなたのコードを記述しますが、[この問題を再現する最小限のコード](http://stackoverflow.com/help/mcve)を共有しないでください –
を移動するための方法です。 –