如何在截止日期到期时从后台服务中删除firebase子项?

时间:2017-04-03 07:59:30

标签: android firebase firebase-realtime-database deadlines

在我的应用中,当用户发布请求时,他还需要设置截止日期。所以当截止日期到期时,我希望应用程序自动删除该请求。我还没有尝试任何东西因为我找不到类似于我需要的东西。

我至少会在用户发布请求时显示代码

post = (Button) myView.findViewById(R.id.post);
        post.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),android.Manifest.permission.ACCESS_COARSE_LOCATION)) {
                        ActivityCompat.requestPermissions(getActivity(), new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSION_REQUEST_LOCATION);
                    }
                    else {
                        ActivityCompat.requestPermissions(getActivity(), new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSION_REQUEST_LOCATION);
                    }
                }
                else {
                    LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
                    Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    try {
                        uloc = hereLocation(location.getLatitude(), location.getLongitude());
                    }
                    catch (Exception e) {
                        e.printStackTrace();
                        //Toast.makeText(getActivity(), "NOT FOUND", Toast.LENGTH_SHORT).show();
                    }

                }
                dead = deadline.getText().toString();
                r = reqdesc.getText().toString();

                if(reqdesc.getText().toString().trim().length()==0){
                    Toast.makeText(getActivity(), "PLEASE ENTER YOUR REQUEST", Toast.LENGTH_LONG).show();
                }
                else if(click==0 || dl==null){
                    Toast.makeText(getActivity(), "PLEASE SET THE DEADLINE FOR YOUR REQUEST", Toast.LENGTH_LONG).show();
                }
                else {
                    String date = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
                    writeNewRequest(r, dead, uemail, uid, uname, uprofile, uloc, date);
                    String reqKey = p.getKey().toString();
                    writeDuplicate(reqKey, r, dead, uemail, uid, uname, uprofile, uloc, date);
                    Intent i = new Intent(getActivity(), RequestConfirm.class);
                    i.putExtra("key", reqKey);
                    startActivity(i);
                    //showNotification();
                }
            }
        });

1 个答案:

答案 0 :(得分:0)

数据库通常无法自行实现这种基于时间的功能。

您有两种可能的行动方式:

  1. 在服务器上运行维护应用程序,该服务器会根据请求的截止日期加载列表,并在截止日期到期时删除请求。例如,你可以在1秒的时间循环中运行这个24/7,但是你不会每秒检查数据库中的最后期限 - 你通过对插入,删除和更新做出反应来维护一个列表(你可以保持与firebase的连接)打开并观察参考,它会告诉你它何时发生变化)。

  2. 进行额外检查/修改您的查询,以忽略超过截止日期的项目。例如,每天运行一次清洁例程,删除这些项目。