Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么AlarmMAnager不工作?_Android - Fatal编程技术网

Android 为什么AlarmMAnager不工作?

Android 为什么AlarmMAnager不工作?,android,Android,我正在从BroadcastReceiver调用服务类。我的类为:- InsertIntoDB objinsert; ArrayList<ContactClass> resultList; ContactClass mContactClass =null; public ScheduleService() { super("B'Day Checker Service"); } @Override protected void onHandleIntent(Inten

我正在从BroadcastReceiver调用服务类。我的类为:-

InsertIntoDB objinsert;
ArrayList<ContactClass> resultList;
ContactClass mContactClass =null;

public ScheduleService() {

     super("B'Day Checker Service");


}

@Override
protected void onHandleIntent(Intent intent)
  { 
    objinsert = new InsertIntoDB(this);
    Log.d("MyService", "About to execute MyTask");
    new MyTask().execute();

     }

private class MyTask extends AsyncTask<Void, Void, ArrayList<ContactClass>> 
   {

    @Override
    protected void onPreExecute() {

        super.onPreExecute();
         mContactClass = new ContactClass();
         resultList= new ArrayList<ContactClass>();
    }

    @Override
    protected ArrayList<ContactClass> doInBackground(Void... arg0)
    {
        List<ContactClass> contacts = objinsert.getAllContacts();
        for (ContactClass cn : contacts)
        {
            String mdob =  cn.getDob();
            long output = dateCompare(mdob);
            if(output==0)
            {
                mContactClass.setId(cn.getId());
                mContactClass.setName(cn.getName());
                mContactClass.setDob(cn.getDob());
                resultList.add(mContactClass);
            }

              Log.d("Name: ",""+resultList.size());
        }
        return resultList;
    }

    @Override
    protected void onPostExecute(ArrayList<ContactClass> result) {

        super.onPostExecute(result);
        System.out.println("posttttt");
        int length=0;
        if(result!=null)
        {
         length = result.size();
        }
        if(length!=0)
        {
            for(int mindex =0;mindex<length;mindex++)
            {
                String date = result.get(mindex).getDob();
                String[] arrdob =date.split("/");
                Calendar cal = Calendar.getInstance();
                cal.setTimeInMillis(System.currentTimeMillis());
                cal.clear();
                cal.set(Integer.parseInt(arrdob[2]), Integer.parseInt(arrdob[1])-1,Integer.parseInt(arrdob[0]),14,17);

                AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
                 Intent intent = new Intent(ScheduleService.this, BirthDayReciever.class);
                 PendingIntent pendingIntent = PendingIntent.getBroadcast(ScheduleService.this, 0, intent, 0);
                 //cal.add(Calendar.SECOND, 5);
                 alarmMgr.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
            }
        }


    }



}


public long dateCompare(String date)
 {
    System.out.println("date---"+date);
    String geivendate[] = date.split("/");
    int Day= Integer.parseInt(geivendate[0]);
    int Month= Integer.parseInt(geivendate[1]);
    int Year= Integer.parseInt(geivendate[2]);

    Date currentdate = new Date();
    Calendar calUpdated = Calendar.getInstance();
    calUpdated.set(Year, Month-1, Day);

    long updateDateMilliSec = calUpdated.getTimeInMillis();
    long diff = currentdate.getTime() - calUpdated.getTimeInMillis();
    long diffDays = (diff / (1000 * 60 * 60 * 24));

    return diffDays;
 }

任何人都可以告诉我哪里错了,特别感谢….

我建议你用一种简单的方法设置报警管理器

为此,您不需要异步任务。 下面的错误表示线程已经死了,一些东西试图在死线程中向处理程序发送消息

07-11 14:16:34.444: W/MessageQueue(942): Handler{44f6ad40} sending message to a Handler on a dead thread
          07-11 14:16:34.444: W/MessageQueue(942): java.lang.RuntimeException: Handler{44f6ad40} sending message to a Handler on a dead thread
下面的链接可以给你一些关于这个问题的提示


您是否尝试过在异步任务中从其他位置执行此操作,但问题是什么,为什么它不起作用?您正在执行某些操作,试图访问死线。我可以使用简单方法而不是异步任务吗?谢谢,我正在尝试,但brodcast未在设定时间执行。
07-11 14:16:34.444: W/MessageQueue(942): Handler{44f6ad40} sending message to a Handler on a dead thread
          07-11 14:16:34.444: W/MessageQueue(942): java.lang.RuntimeException: Handler{44f6ad40} sending message to a Handler on a dead thread