如何在循环中解决解析异常?

时间:2018-06-22 13:11:17

标签: java android sqlite alarmmanager parseexception

在我的应用中,警报管理器用于向用户发送通知。通知发送后,它启动一个计时器,最后启动另一个操作;用户可以单击一个按钮来停止计时器,并在第二天重置警报。
警报时间以HH:mm格式保存在sqlite表格中,并通过带有循环的“ ArrayList of PendingIntent”来设置警报。
因此,如果当前时间在闹钟时间和闹钟时间+计时器之间,则单击按钮时要再次设置闹钟。

我使用for(),将try()parceException重复使用,以更改时间格式,然后进行比较,但这是行不通的。

代码如下:

 public void onClick(View view) {

            MEDPres=true;
            ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>();
            AlarmManager am = (AlarmManager) getContext().getSystemService(ALARM_SERVICE);
            Calendar ora_allm = Calendar.getInstance();
            Calendar ora_allm_piut = ora_allm;
            Intent i;
            PendingIntent pi;
            boolean trovato= false;
            int hrs,min,ID_M;
            SimpleDateFormat parser = new SimpleDateFormat("HH:mm");
            String NOME_M,TIPO_M,QUANTITA_M,O1,O2,O3;
            String[] parts;

            for(int contatore = 0; lista_allarmi.moveToNext() || trovato; contatore++) {
                Date ORANOTIFICA;
                ID_M=lista_allarmi.getInt(0);
                NOME_M=lista_allarmi.getString(1);
                TIPO_M=lista_allarmi.getString(2);
                String ora_notifica= lista_allarmi.getString(3);
                parts = ora_notifica.split(":");
                hrs =Integer.parseInt(parts[0]); // ore
                min = Integer.parseInt(parts[1]); // minuti
                ora_allm.set(Calendar.HOUR_OF_DAY,hrs);
                ora_allm.set(Calendar.MINUTE, min);
                ora_allm.set(Calendar.SECOND, 0);
                ora_allm_piut=ora_allm;
                ora_allm_piut.add(Calendar.MINUTE, 5);

                Date ORANOTIFICAPIUTIMER;
                Date ora_attuale = Calendar.getInstance().getTime();
                Date ORARIOATT;
                i = new Intent(getContext(), AlarmReceiver.class);
                i.putExtra("id", ID_M);
                i.putExtra("NMM", NOME_M);
                i.putExtra("TPM", TIPO_M);
                pi = PendingIntent.getBroadcast(getContext(), contatore, i, PendingIntent.FLAG_UPDATE_CURRENT);
                Toast.makeText(getContext(), "Prima del try", Toast.LENGTH_SHORT).show();


                try{
                    ORANOTIFICA=parser.parse(ora_notifica);
                    ORANOTIFICAPIUTIMER=parser.parse(String.valueOf(ora_allm_piut));
                    ORARIOATT=parser.parse(String.valueOf(ora_attuale));
                    Toast.makeText(getContext(), "Dentro try", Toast.LENGTH_SHORT).show();

                    if (ORARIOATT.after(ORANOTIFICA) && ORARIOATT.before(ORANOTIFICAPIUTIMER)) {
                        ora_allm.add(Calendar.DATE,1);
                        //am.set(AlarmManager.RTC_WAKEUP, ora_allm.getTimeInMillis(), pi);
                        am.setInexactRepeating(AlarmManager.RTC_WAKEUP, ora_allm.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pi);
                        intentArray.add(pi);
                        trovato=true;
                        Toast.makeText(getContext(), "Medicina presa", Toast.LENGTH_SHORT).show();
                    }else {
                        //am.set(AlarmManager.RTC_WAKEUP, ora_allm.getTimeInMillis(), pi);
                        am.setInexactRepeating(AlarmManager.RTC_WAKEUP, ora_allm.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pi);
                        intentArray.add(pi);
                    }

                }catch (ParseException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();

                }


            }
        }
    });

0 个答案:

没有答案