2017-03-08 36 views
0

嗨,目前我正在尝试在我的列表适配器内设置一个按钮。该按钮的想法是,它从两个编辑文本中抓取一组值,一个是小时,另一个是分钟值,然后将其设置为日历和闹钟。应用程序达到特定时间后,它应该发送一个通知给用户,但目前它会在按下按钮时立即发送通知,而不是等待所需的时间,任何人都可以发现我的错误?在特定时间发送通知日历

convertView = LayoutInflater.from(getContext()).inflate(R.layout.custom_row_contact_number, null); 


      alarmManager = (AlarmManager) convertView.getContext().getSystemService(Context.ALARM_SERVICE); 

      myCalendar = Calendar.getInstance(); 

      year_x = myCalendar.get(Calendar.YEAR); 
      month_x = myCalendar.get(Calendar.MONTH); 
      day_x = myCalendar.get(Calendar.DAY_OF_MONTH); 


      receiver = new Intent(convertView.getContext(), Alarm_Reciever.class); 


      Button btnSendMessage = (Button)convertView.findViewById(R.id.btnSendMessage); 
      btnSendMessage.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        int hourValue = Integer.valueOf(editHours.getText().toString()); 
        int minutevalue = Integer.valueOf(editMinutes.getText().toString()); 

        Log.i("hour", Integer.toString(hourValue)); 






        myCalendar.set(Calendar.HOUR_OF_DAY,hourValue); 
        myCalendar.set(Calendar.MINUTE, minutevalue); 



        pendingIntent = PendingIntent.getBroadcast(v.getContext(), 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT); 

        alarmManager.set(AlarmManager.RTC_WAKEUP,myCalendar.getTimeInMillis(),pendingIntent); 


       } 
      }); 

     } 

另外如果我将下面的代码,在OnCreate我留下

 alarmManager = (AlarmManager) convertView.getContext().getSystemService(Context.ALARM_SERVICE); 

     myCalendar = Calendar.getInstance(); 

     year_x = myCalendar.get(Calendar.YEAR); 
     month_x = myCalendar.get(Calendar.MONTH); 
     day_x = myCalendar.get(Calendar.DAY_OF_MONTH); 


     receiver = new Intent(convertView.getContext(), Alarm_Reciever.class); 

与下面的代码,但我收到一条错误

显示java.lang.NullPointerException:试图调用虚拟方法'void java.util.Calendar.set(int,int)'在空对象上引用

Button btnSendMessage = (Button)convertView.findViewById(R.id.btnSendMessage); 
     btnSendMessage.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       int hourValue = Integer.valueOf(editHours.getText().toString()); 
       int minutevalue = Integer.valueOf(editMinutes.getText().toString()); 

       Log.i("hour", Integer.toString(hourValue)); 






       myCalendar.set(Calendar.HOUR_OF_DAY,hourValue); 
       myCalendar.set(Calendar.MINUTE, minutevalue); 



       pendingIntent = PendingIntent.getBroadcast(v.getContext(), 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT); 

       alarmManager.set(AlarmManager.RTC_WAKEUP,myCalendar.getTimeInMillis(),pendingIntent); 


      } 
     }); 

回答

0

它可能是因为今天总是今天,所以预定的时间可能会在过去。

这可以通过几种方式解决,但一个简单的方法是在设置小时和分钟后添加此项。

if(calendar.getTimeInMillis() < System.currentTimeMillis()) { 
    calendar.add(Calendar.DAY_OF_YEAR, 1); 
} 
+0

呃好吧不要在我的脸上有鸡蛋我以前设置过的时间:D – Steven