【问题标题】:How to synchronize firebase data?如何同步firebase数据?
【发布时间】:2015-11-28 09:37:08
【问题描述】:

我使用firebase 来存储我的数据。这就是我的firebase 数据库的样子。 在我的代码中,我试图在按钮单击事件上生成一个新的唯一 appointment-id。如果当前appointment-id 是88,那么当用户按下他的应用程序上的按钮时它应该变成89,并且这个appointment-id 被分配给他作为他唯一的appointment-id。我面临的问题是,当两个或多个用户同时按下他们应用上的按钮时,相同的appointment-id 被分配给他们两个。

我希望同步我的appointment-id,即一次只有一个用户可以访问它。这可能吗?我怎样才能实现它?谢谢。

【问题讨论】:

    标签: android firebase


    【解决方案1】:

    Firebase 有可以帮助您使用增量计数器的事务

    Firebase apptRef = new Firebase("<my-firebase-app>");
    apptRef.runTransaction(new Transaction.Handler() {
        @Override
        public Transaction.Result doTransaction(MutableData currentData) {
            if(currentData.getValue() == null) {
                currentData.setValue(1);
            } else {
                currentData.setValue((Long) currentData.getValue() + 1);
            }
            return Transaction.success(currentData); //we can also abort by calling Transaction.abort()
        }
        @Override
        public void onComplete(FirebaseError firebaseError, boolean committed, DataSnapshot currentData) {
            //This method will be called once with the results of the transaction.
        }
    });
    

    阅读Firebase docs了解更多信息。

    【讨论】:

    • 那么这段代码现在会阻止两个或更多用户同时访问appointment-id 对象吗?
    • 感谢您的及时回复。现在考虑一个情况,两个用户尝试同时访问appointment-id,但user1user2之前100ms访问appointment-id,所以现在user1的事务将开始。但是user2 呢?他的交易会在队列中,还是我必须编写一些代码来为user2 开始交易,因为他的交易没有完成,因为user1 轮到他了?
    • 同样的情况。每次更新都是事务性的。您也可以对此进行测试,看看情况是否适合您。
    • 谢谢,我会检查并通知您。
    猜你喜欢
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多