热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何设置计时器来更新firebase数据库中的数据-howtosetatimertoupdatedatainfirebasedatabase

SobasicallyIambuildinganappthatwilldisplayeventsonascreenandupdateitassoonasasp

So basically I am building an app that will display events on a screen and update it as soon as a specific time which has been set has been reached. It would be easier to use a timer instead of Cloud Functions to achieve this but when I tried, it just didn't work. Looked at other questions on StackOverFlow but all weren't clear. What am I doing wrong? Below is my code.

所以基本上我正在构建一个应用程序,它将在屏幕上显示事件,并在达到已设置的特定时间后立即更新。使用计时器而不是云函数来实现这一点会更容易,但是当我尝试时,它只是不起作用。看看StackOverFlow上的其他问题,但都不清楚。我究竟做错了什么?以下是我的代码。

update_btn.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {

    int time = 0;

    String info = information.getEditText().getText().toString();
    final long timeCountInMilliSecOnds= time * 60 * 1000;
    time = Integer.parseInt(xxx.getEditText().getText().toString().trim());

    if (!TextUtils.isEmpty(info) && !TextUtils.isEmpty(String.valueOf(time))) {

        progressBar.setVisibility(View.VISIBLE);

        update_ref = FirebaseDatabase.getInstance().getReference().child("Event Halls").child("Ankobra One").child("Event Schedule");
        final int finalTime = time;
        update_ref.setValue(info).addOnCompleteListener(new OnCompleteListener() {
            @Override
            public void onComplete(@NonNull Task task) {
                final DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Event Halls").child("Ankobra One").child("Event Schedule");
                ref.addListenerForSingleValueEvent(new ValueEventListener() {
                    void onDataChanged(@NonNull DataSnapshot snapshot) {
                        new android.os.Handler().postDelayed(
                                new Runnable() {
                                    public void run() {
                                        retrieve_ref.setValue("No event scheduled");
                                    }
                                },
                                timeCountInMilliSeconds);
                    }

                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });
                        Toast.makeText(AnkobraOneActivity.this, "Event Changed and scheduled for " + finalTime + " hours", Toast.LENGTH_LONG).show();
                        progressBar.setVisibility(View.INVISIBLE);
                        myDialog.dismiss();
                    }
                });

            } else

            {
                Toast.makeText(AnkobraOneActivity.this, "Insert all details accordingly", Toast.LENGTH_SHORT).show();
            }
        }

    });

I used this answer to achieve what I have done so far but it didn't work.

我用这个答案来实现我到目前为止所做的工作,但它没有用。

https://stackoverflow.com/questions/4817933/what-is-the-equivalent-to-a-Javascript-setinterval-settimeout-in-android-java

Help?

1 个解决方案

#1


1  

based on your code,

根据你的代码,

   int time = 0;
   String info = information.getEditText().getText().toString();
   final long timeCountInMilliSecOnds= time * 60 * 1000;

.

timeCountInMilliSeconds 

always =0;

so, you have to change the code to

所以,你必须将代码更改为

  int time = 0;
  String info = information.getEditText().getText().toString();
  time =Integer.parseInt(xxx.getEditText().getText().toString().trim());
  final long timeCountInMilliSecOnds= time * 60 * 1000;

Also, you have to use setValue() inside the timer method.

此外,您必须在timer方法中使用setValue()。

Here is the complete code:

这是完整的代码:

update_btn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {

                        int time = Integer.parseInt(xxx.getEditText().getText().toString().trim());
                        String info = information.getEditText().getText().toString();
                        final long timeCountInMilliSecOnds= time * 60 * 1000;

                        if (!TextUtils.isEmpty(info) && !TextUtils.isEmpty(String.valueOf(time))) {

                            progressBar.setVisibility(View.VISIBLE);

                new Timer().scheduleAtFixedRate(new TimerTask() {

                            @Override
                        public void run() {
                            //Called each time when 1000 milliseconds (1 second) (the period parameter)

                            update_ref = 
            FirebaseDatabase.getInstance().getReference().child("Event Halls").child("Ankobra One").child("Event Schedule");
                            final int finalTime = time;
                            update_ref.setValue(info).addOnCompleteListener(new OnCompleteListener() {
                                @Override
                                public void onComplete(@NonNull Task task) {
                                        final DatabaseReference ref = 
            FirebaseDatabase.getInstance().getReference().child("Event Halls").child("Ankobra One").child("Event Schedule");
                                    ref.addListenerForSingleValueEvent(new ValueEventListener() {
                                        void onDataChanged(@NonNull DataSnapshot snapshot) {
                                              retrieve_ref.setValue("No event scheduled");


                                        }

                                        @Override
                                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                                        }

                                        @Override
                                        public void onCancelled(@NonNull DatabaseError databaseError) {

                                        }
                                    });
                                            Toast.makeText(AnkobraOneActivity.this, "Event Changed and scheduled for " + finalTime + " hours", Toast.LENGTH_LONG).show();
                                            progressBar.setVisibility(View.INVISIBLE);
                                            myDialog.dismiss();
                                        }
                                    });
                              },
                    //Set how long before to start calling the TimerTask (in milliseconds)
                    0,
                    //Set the amount of time between each execution (in milliseconds)
                    timeCountInMilliSeconds);
                                } else

                                {
                                    Toast.makeText(AnkobraOneActivity.this, "Insert all details accordingly", Toast.LENGTH_SHORT).show();
                                }
                            }

                        });

推荐阅读
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 本文介绍了Java中Hashtable的clear()方法,该方法用于清除和移除指定Hashtable中的所有键。通过示例程序演示了clear()方法的使用。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
  • NB:我看到我的草稿中已有将近两年的教程,所以我决定将其发布。在本教程中,我将构建一个简单的reactJs应用程序,该应用程 ... [详细]
  • 需求分析是软件生命周期中相当重要的一个阶段。根据StandishGroup对23000个项目进行的研究结果表明,28%的项目彻底失败,46%的项目超出经费预算或者超出 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了当应用程序处于后台状态时,FCM多次推送通知无法正常工作相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Firebase使用电子邮件,密码,显示名 ... [详细]
author-avatar
王乐668_802
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有