Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Firebase中自动增加值_Java_Android_Firebase_Firebase Realtime Database_Auto Increment - Fatal编程技术网

Java 在Firebase中自动增加值

Java 在Firebase中自动增加值,java,android,firebase,firebase-realtime-database,auto-increment,Java,Android,Firebase,Firebase Realtime Database,Auto Increment,如何从Android客户端自动增加Firebase中存储的值 当前:我声明intid=1。当我递增时,我看到值2、3等被存储。这很好,但是当我重新运行项目时,id再次设置为1 我希望它的行为像一个静态变量,所以我可以创建一个id,它将从1变为无穷大,而无需重置 更新失败 final Firebase upvoteref = new Firebase("https://shareurday.firebaseio.com/Message/"+msg_id+"/upvo

如何从Android客户端自动增加Firebase中存储的值

当前:我声明
intid=1
。当我递增时,我看到值2、3等被存储。这很好,但是当我重新运行项目时,
id
再次设置为1

我希望它的行为像一个静态变量,所以我可以创建一个id,它将从1变为无穷大,而无需重置

更新失败

                final Firebase upvoteref = new Firebase("https://shareurday.firebaseio.com/Message/"+msg_id+"/upvotes"); 

            upvoteref.runTransaction(new Transaction.Handler() {
                @Override
                public Transaction.Result doTransaction(final MutableData currentData) {
                    if (currentData.getValue() == null) {
                        currentData.setValue(1);
                    } else {
                        currentData.setValue((Long) currentData.getValue() + 1);
                    }
                    return Transaction.success(currentData);
                }

                public void onComplete(FirebaseError firebaseError, boolean committed, DataSnapshot currentData) {
                    if (firebaseError != null) {
                        System.out.println("Firebase counter increment failed.");
                    } else {
                        System.out.println("Firebase counter increment succeeded.");
                    }
                }
            });
我使用以下命令将Firebase引用和字符串传递给函数incrementCounter

if(language_chosen.equalsIgnoreCase("english"))
 {
   Firebase publRef = f.child("Language").child("English").child("Message");
   Firebase newPublRef = publRef.push();
   writeMsgActivity demo = new writeMsgActivity();
   demo.incrementCounter(newPublRef,the_msg_enter);                                 
  }
现在,我尝试在oncomplete方法中使用传递的引用和位于
public void incrementCounter(Firebase publref,string my_msg)
的字符串,但它给了我一个错误

   public void incrementCounter(Firebase publref,String my_msg) {
    publref.runTransaction(new Transaction.Handler() {
        @Override
        public Transaction.Result doTransaction(final MutableData currentData) {
            if (currentData.getValue() == null) {
                currentData.setValue(1);
            } else {
                currentData.setValue((Long) currentData.getValue() + 1);
            }

            return Transaction.success(currentData);
        }

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

                Map<String, Object> publ = new HashMap<String, Object>();
                publ.put("pubMsg", my_msg);
                publ.put("id",currentData);
                publref.setValue(publ);
            }
        }
    });
}

变量msg_id是push随机生成的id。

下面是一个增加单个计数器的示例方法。关键的想法是,要么创建条目(将其设置为1),要么修改现有条目。在这里使用事务可以确保如果多个客户端同时尝试递增计数器,所有请求最终都会成功。从Firebase文档(重点矿山)中:

处理可能被并发更新损坏的复杂数据时,请使用我们的事务功能


firestore中添加了一个新功能以自动增加值。简单到

document("fitness_teams/Team_1").
  updateData(["step_counter" : FieldValue.increment(500)])
参考链接:

在我的项目中使用以下代码

var firestore = Firestore.instance;
firestore.collection('student').document('attendance').updateData({'total_attendace': FieldValue.increment(1)});

我不确定您在Firebase中使用的代码是什么,以及重新加载在这里意味着什么?。但如果在重新加载时调用相同的函数(将id设置为1),则会得到id 1。您必须在某些文件/数据库中设置id,并在该存储中不断更新。我可以在数据库中设置id,但每次重新运行程序时,它都会重置为整数id=1,每次运行时,您都需要检查文件/数据库中是否存在。。。如果不存在则插入,否则更新。ur Q似乎是通用的,但如果对象/记录是共享的,您需要跟踪所有并发更改。您能告诉我如何传入变量吗?我对此不太在行。您到底想实现什么?如果使用
push
保存数据,它将自动生成一个唯一的id,并且不需要手动增加计数器。见例。让我知道这对你来说是否是一个更好的解决方案。我需要为每封邮件创建一个id,这样我就可以在回复中与另一棵树进行比较。(我已经完成了这一部分)例如,每个消息都有一个id,对此消息的每个回复都将使用该消息的id。因此,当我检索回复时,它将位于消息id内。您是否尝试了
publil.put(currentData,my_msg)正如我之前指出的那样?很抱歉这么麻烦,我已经开始工作了,我将上传解决方案。它正盯着我的脸。非常感谢你的帮助!!!
var firestore = Firestore.instance;
firestore.collection('student').document('attendance').updateData({'total_attendace': FieldValue.increment(1)});