我正在开发家庭药房应用程序,每个用户都有多个成员,这意味着(所有家庭成员都有一个应用程序),所以我有一个用户表和成员表,药品表和member_drugs表。
成员表有列:
id,user_id,name,age,...etc...
member_drugs表包含以下各列:
id,member_id,drug_id,drug dose,drug dose repetition (即一天中第一次和第二次注射之间的时间间隔--可能是6小时),first time dose,等等……
现在我需要推送每个剂量提醒的通知(在其特定时间内的所有重复)。
例如:
成员y的药物x,药物剂量重复是3小时,药物的第一次是上午12点,所以:我需要推送通知: 1-第一次在:12 am。以及以下内容中的重复:
2- 3 am。
3- 6 am。
4- 9 am。
5- ....等等。
我的问题是通知只是第一次出现。
我在这段代码中尝试过,但它不起作用。我不知道我错过了什么
这是我的通知服务方法:
@Override
protected void onHandleWork(Intent intent) {
Date date = new Date();
toda = dateFormat.format(date);
today = dateFormat.parse(toda, new ParsePosition(0));
java.util.Date date1 = new java.util.Date();
String current = sdf.format(date1);
Date now1 = sdf.parse(current, new ParsePosition(0));
String now = sdf.format(now1);
arrayList1 = setTimeAlarm();
if (arrayList1 != null) {
if (arrayList1.size() > 0) {
for (DrugAlert d : arrayList1) {
Log.d(getClass().getSimpleName(), "heeeeeeeeeeeeer");
String start = d.get_start_date();
Date d1 = dateFormat.parse(start, new ParsePosition(0));
String end = d.get_end_date();
Date d2 = dateFormat.parse(end, new ParsePosition(0));
String firstTime = d.getAlert_time();
Date t1 = sdf.parse(firstTime, new ParsePosition(0));
String t = sdf.format(t1);
int repeat = d.getDose_r();
Calendar cal = Calendar.getInstance(); // creates calendar
cal.setTime(t1); // sets calendar time/date
if ((d2.after(today) || d2.equals(today)) && (d1.equals(today) || today.after(d1))) {
for (int i = repeat; i<=24; i = i +repeat){
// i = repeat;
cal.add(Calendar.HOUR_OF_DAY,i); // adds one hour if repeat == 1
cal.getTime(); // returns new date object, one hour in the future
Date repDose1 = cal.getTime();
String repDose = sdf.format(repDose1);
if (t.equals(now) || repDose.equals(now) ) {
memName = d.getMember_name();
drugName = d.getDrug_name();
courseId = d.get__id();
dose = d.getDose_q();
Log.d(getClass().getSimpleName(), "onHandleIntent, started handling a notification event");
try {
processStartNotification();
NOTIFICATION_ID = NOTIFICATION_ID +1;
String action = intent.getAction();
if (ACTION_START.equals(action)) {
processStartNotification();
}
} finally {
WakefulBroadcastReceiver.completeWakefulIntent(intent);
}
}
}
}
}
}
}
}发布于 2019-03-13 09:32:46
我通过以下代码修复:
@Override
protected void onHandleWork(Intent intent) {
Date date = new Date();
toda = dateFormat.format(date);
today = dateFormat.parse(toda, new ParsePosition(0));
java.util.Date date1 = new java.util.Date();
String current = sdf.format(date1);
Date now1 = sdf.parse(current, new ParsePosition(0));
String now = sdf.format(now1);
arrayList1 = setTimeAlarm();
if (arrayList1 != null) {
if (arrayList1.size() > 0) {
for (DrugAlert d : arrayList1) {
Log.d(getClass().getSimpleName(), "heeeeeeeeeeeeer");
String start = d.get_start_date();
Date d1 = dateFormat.parse(start, new ParsePosition(0));
String end = d.get_end_date();
Date d2 = dateFormat.parse(end, new ParsePosition(0));
String firstTime = d.getAlert_time();
Date t1 = sdf.parse(firstTime, new ParsePosition(0));
String t = sdf.format(t1);
int repeat = d.getDose_r();
if ((d2.after(today) || d2.equals(today)) && (d1.equals(today) || today.after(d1))) {
// for (int i = repeat; i<=24; i = i +repeat){
int f = repeat;
while (f <= 24){
Calendar cal = Calendar.getInstance(); // creates calendar
cal.setTime(t1); // sets calendar time/date
cal.add(Calendar.HOUR_OF_DAY, f);// adds one hour if repeat == 1
cal.add(Calendar.MINUTE, 0);
cal.add(Calendar.SECOND, 0);
cal.getTime(); // returns new date object, one hour in the future
Date repDose1 = cal.getTime();
String repDose = sdf.format(repDose1);
if (t.equals(now) || repDose.equals(now)) {
memName = d.getMember_name();
drugName = d.getDrug_name();
courseId = d.get__id();
dose = d.getDose_q();
Log.d(getClass().getSimpleName(), "onHandleIntent, started handling a notification event");
try {
processStartNotification();
NOTIFICATION_ID = NOTIFICATION_ID +1;
String action = intent.getAction();
if (ACTION_START.equals(action)) {
processStartNotification();
}
} finally {
WakefulBroadcastReceiver.completeWakefulIntent(intent);
}
}
f = f + repeat;
if(f == 4){
int x=1;
int y=x+2;
}
}
}
}
}
}
}
https://stackoverflow.com/questions/55127656
复制相似问题