Android:每天、每周和每月重置 Parse 后端对象

Android: Reset Parse backend object everyday, week and month

我正在尝试使用警报管理器每天、每周和每月重置解析 int 对象。我有三个运行和更新文本视图的对象 dayObject、weekObject 和 monthObject。但是该应用程序崩溃并显示错误值可能不为空。请帮忙!!!

onCreate():

Intent iToday = new Intent(this, TodayReset.class);
iToday.putExtra("createdAt", createdAt.getTime());
piToday = PendingIntent.getBroadcast(this, 0, iToday, 0);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, today.getTime(), AlarmManager.INTERVAL_DAY, piToday);

On Receive():我从日历中获取今天、周和月的日期。然后我检查条件并更新 Parse 后端。

ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Pattern");

query.whereEqualTo("username", ParseUser.getCurrentUser().getUsername());

query.orderByDescending("createdAt");

query.getFirstInBackground(new GetCallback<ParseObject>() {
   @Override
   public void done(ParseObject object, ParseException e) {
     if(e == null && object != null) {
       totalValue = object.getInt("totalValue");
       weekValue = object.getInt("weekValue");
       monthValue = object.getInt("monthValue");            
     } else {
       Log.i("RetErr", e.getMessage());
     }
   }
});

ParseObject pattern = new ParseObject("Pattern");

pattern.put("username", ParseUser.getCurrentUser().getUsername());

pattern.put("totalValue", totalValue);
pattern.put("todayValue", 0);
pattern.put("weekValue", weekValue);
pattern.put("monthValue", monthValue);

pattern.save();

我每周和每月都在重复同样的事情。我正在检索所有对象,因为当我只保存一个特定对象时,其他对象显示未定义。因此,我检索旧值并再次保存。

将新解析对象的创建移动到 done() 中,如下所示。因为查询是在后台完成的,所以在您尝试使用 totalValue 等之前没有完成。

ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Pattern");

        query.whereEqualTo("username", ParseUser.getCurrentUser().getUsername());

        query.orderByDescending("createdAt");

        query.getFirstInBackground(new GetCallback<ParseObject>() {
            @Override
            public void done(ParseObject object, ParseException e) {

                if(e == null && object != null) {

                    totalValue = object.getInt("totalValue");
                    weekValue = object.getInt("weekValue");
                    monthValue = object.getInt("monthValue");
                    ParseObject pattern = new ParseObject("Pattern");

        pattern.put("username", ParseUser.getCurrentUser().getUsername());

        pattern.put("totalValue", totalValue);
        pattern.put("todayValue", 0);
        pattern.put("weekValue", weekValue);
        pattern.put("monthValue", monthValue);

            pattern.save();


                } else {

                    Log.i("RetErr", e.getMessage());

                }

            }

        });