如何使用android

时间:2016-10-24 05:50:16

标签: java android database

我在所有人列表的通知类显示中创建了BDay应用程序,但我只想显示当前日期。
在这段代码中,我必须与当前日期和我的数据库日期进行比较,我想只显示当前日期的人。
我想在RecyclerView中显示当前日期人员。
我在数据库中添加了静态数据。 我在另一个集会上已经失败,但不能消失 我是android编程的新手

我的静态数据库

dd            MMMM
 2          October
14          November
24          October

我的代码

 private List<People> notificationList = new ArrayList<>();
private List<People> peopleListSelected = new ArrayList<>();
private RecyclerView recyclerView;
private NotificationAdapter notificationAdapter;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_notificatoin);
    BuildData();
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    calender();

    Calendar calendar = Calendar.getInstance();
    for (People people : notificationList) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("dd-MMMM");

            String today = sdf.format(calendar.getTime());
            String startDate = people.getDate() + "-" + people.getMonth();

            if (today.equals(startDate)) {

                Date date = sdf.parse(startDate);

                calendar.setTime(date);
                calendar.set(Calendar.HOUR_OF_DAY, 18);
                calendar.set(Calendar.MINUTE, 35);
                calendar.set(Calendar.SECOND, 0);
                peopleListSelected.add(people);

            }

        } catch (ParseException e) {
            e.printStackTrace();

        }
    }


    Intent intent1 = new Intent(Notification.this, MyReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getService(Notification.this, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager am = (AlarmManager) Notification.this.getSystemService(Notification.this.ALARM_SERVICE);
    am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

    recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    notificationAdapter = new NotificationAdapter(getApplicationContext(), peopleListSelected);

    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setItemAnimator(new

            DefaultItemAnimator()

    );
    recyclerView.setAdapter(notificationAdapter);
    Button backwindow = (Button) findViewById(R.id.backwindow);
    backwindow.setOnClickListener(new View.OnClickListener()

                                  {
                                      public void onClick(View v) {
                                          onBackPressed();
                                      }
                                  }

    );


}

public void calender() {
}

public void clickMe(View view) {
    Intent intent = new Intent(this, NotificationOpen.class);
    this.startActivity(intent);
}

public void onBackPressed() {
    super.onBackPressed();
}

private List<People> BuildData() {
    DataBaseHelper db = new DataBaseHelper(getApplicationContext());

    try {
        db.createDataBase();
    } catch (IOException ioe) {
        throw new Error("Unable to create database");
    }

    if (db.open()) {
        notificationList = db.getPeopleDate();
    }

    return notificationList;

}

}

1 个答案:

答案 0 :(得分:0)

如果您为出生日期使用标准格式,并且使用取代麻烦的旧遗留日期时间类的java.time类,这项工作会容易得多。

ISO 8601

ISO 8601格式定义了日期时间值的文本格式。对于仅日期值,格式为YYYY-MM-DD,例如1955-01-23。对于没有一年的一个月,请用连字符替换年份:--01-23。它可以作为文本存储在您的数据库中。

MonthDay

Java提供了MonthDay类来表示一个月和一个月的日期。自动解析并生成上面讨论的ISO 8601字符串。

MonthDay md = MonthDay.parse( "--01-23" );

您可以在班级上存储此类MonthDay个对象,例如birthDate班级上的Person。这样做可以使您的代码更加自我记录,提供类型安全性,并保证有效值(例如,2月31日)。

要将此值写入数据库,请通过调用toString生成字符串。

String output = md.toString();  // Ex: --01-23

LocalDate

LocalDate类表示没有时间且没有时区的仅限日期的值。

时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。

ZoneId z = ZoneId.of( "America/Montreal" ); 
LocalDate today = LocalDate.now( z );

您可以要求JVM当前的默认时区。但是要知道,当前默认值可以随时由共享此JVM的任何应用程序的任何线程中的任何代码进行更改。因此,当重要时,请与用户询问/确认时区。

ZoneId z = ZoneId.systemDefault();  // Caution: Can change at any moment.

要查看特定MonthDay对象是否是今天要庆祝的生日,请进行比较。

MonthDay mdToday = MonthDay.from( today );
…
if( md.equals( mdToday ) ) {
    … // Add to collection.
}

例如。

MonthDay mdToday = MonthDay.from( LocalDate.now( ZoneId.of( "America/Montreal" ) ) );

List<Person> birthdayCelebrants = new ArrayList<>();
for( Person person: people ) {
    if( person.getBirthMonthDay().equals( mdToday ) ) {
        birthdayCelebrants.add( person );
    }
}

要生成用于显示日期值的字符串,请搜索DateTimeFormatter类的Stack Overflow。

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore