【问题标题】:Implementing a Firebase server-side countdown timer for Android?为 Android 实现 Firebase 服务器端倒数计时器?
【发布时间】:2017-05-29 15:02:36
【问题描述】:

有没有办法在 Android Studio 中实现 Firebase 服务器端倒计时?

我希望计时器位于服务器端,这意味着每当用户打开我的应用程序时,所有用户的计数器总是在同一时间。

我阅读了this 问题的答案,但他们已有 2 年以上的历史,Firebase 此后发生了很大变化。它于 2014 年 10 月被 Google 收购,并于 2016 年 5 月在 Google I/O 上展示了大量新功能。

如果 Firebase 无法提供该功能,是否有其他平台可以提供服务器端倒计时?

【问题讨论】:

    标签: java android-studio firebase timer server-side


    【解决方案1】:

    创建一个服务器端计时器,用于更新实时数据库中的值。

    Firebase ref = new Firebase('/firebase/database/url/time');
        new AnimationTimer(){
            start(){...}
            stop(){...}
            handle(){...ref.addValue(time);}
            };
    

    这将每毫秒更新您的实时数据库。要在您的应用程序中查看它,只需调用它。

    Firebase ref = new Firebase('/firebase/database/url/time/value')

            ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot ds) {
                Platform.runLater(() -> {
                label.setText(ds.getValue() + "");
            });
            }
    
            @Override
            public void onCancelled(FirebaseError fe) {
                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }
    
        });
    

    它将以毫秒为单位在您的应用程序上实时更新。我能够让它在 Java 中运行

    【讨论】:

    • 这是我在 s.o. 上的第一个答案。所以,请告诉我如何改进我的回复。
    • 您能举个例子,说明在 start () {...} 和 stop (){...} 中传递日期的格式是什么?
    • 请注意,因为 Firestore 会根据读写次数向您收费。用 Firestore 来做这件事是一个非常昂贵的想法。
    【解决方案2】:

    我没有更好的倒计时只在客户端计算的想法。

    如果你这样做会发生什么:

    1. 以时间戳获取服务器时间(添加到srvTime 变量)

    为“倒计时”计时器创建新记录:

    1. 开始时间:srvTime
    2. 结束时间:例如Time in ms when countdown ended (5min = 60000*5)

    你可以在客户端计算。

    或者ServerValue.TIMESTAMP创建一个监听器

    ref.addValueEventListener(new ValueEventListener() {
        public void onDataChange(DataSnapshot dataSnapshot) {
            System.out.println(dataSnapshot.getValue()); 
        }
    
        public void onCancelled(DatabaseError databaseError) { }
    });
    ref.setValue(ServerValue.TIMESTAMP);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 2012-02-13
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多