如何在截止日期到期时从后台服务中删除 Firebase 子级



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

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

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. 在服务器上运行维护应用,该应用加载包含请求截止时间的列表,并在截止时间到期时删除请求。例如,您在 1 秒的时间循环上运行这个 24/7,但您不会每秒检查数据库中的截止日期 - 您可以通过对插入、删除和更新做出反应来维护一个列表(您只需保持与 Firebase 的连接打开并观察 ref,它会告诉您何时更改(。

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

最新更新