2012-07-11 129 views
0

我打电话从broadcastReciever我的类服务类是由于: -为什么AlarmMAnager不工作?

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; 
} 

但它不是工作doinBackground方法之后运行在logcat中没有应用程序崩溃只在logcat的一个例外是: -

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 
07-11 14:16:34.444: W/MessageQueue(942): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:179) 
07-11 14:16:34.444: W/MessageQueue(942): at android.os.Handler.sendMessageAtTime(Handler.java:457) 
07-11 14:16:34.444: W/MessageQueue(942): at   android.os.Handler.sendMessageDelayed(Handler.java:430) 
07-11 14:16:34.444: W/MessageQueue(942): at android.os.Handler.sendMessage(Handler.java:367) 
07-11 14:16:34.444: W/MessageQueue(942): at android.os.Message.sendToTarget(Message.java:348) 
07-11 14:16:34.444: W/MessageQueue(942): at android.os.AsyncTask$3.done(AsyncTask.java:214) 
07-11 14:16:34.444: W/MessageQueue(942): at java.util.concurrent.FutureTask$Sync.innerSet(FutureTask.java:252) 
07-11 14:16:34.444: W/MessageQueue(942): at java.util.concurrent.FutureTask.set(FutureTask.java:112) 
07-11 14:16:34.444: W/MessageQueue(942): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:310) 
07-11 14:16:34.444: W/MessageQueue(942): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
07-11 14:16:34.444: W/MessageQueue(942): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
07-11 14:16:34.444: W/MessageQueue(942): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
07-11 14:16:34.444: W/MessageQueue(942): at java.lang.Thread.run(Thread.java:1096) 

有人建议我在哪里,我在额外错误感谢....

+0

您是否尝试过其他的地方做,然后在的AsyncTask, – AAnkit 2012-07-11 09:03:36

+0

不,我只是想那...... – sandee 2012-07-11 09:07:02

+0

但是,什么是问题,为什么它不工作? – sandee 2012-07-11 09:08:03

回答

1

我建议你设置报警经理在一个简单的方法,

您不需要为此目的使用asyncTask。 以下错误表示线程已经死机,并且有些事情尝试向死线程中的处理程序发送消息。

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 

以下链接可以给你一些提示在这个问题上

link

+0

谢谢我正在尝试它,但brodcast不是在设定的时间执行。 – sandee 2012-07-11 09:33:49

+0

http://stackoverflow.com/a/11366469/519718看到这个链接 – AAnkit 2012-07-11 09:36:12

+0

谢谢很多现在它的工作.. – sandee 2012-07-11 09:40:44