2012-11-18 19 views
7

i neue E-Mails in der Inbox zu erkennen versuchen subscribeToPullNotifications wie folgt verwendet:subscribeToPullNotifications erkennen keine neue E-Mails in der Inbox

PullSubscription subscription = service.subscribeToPullNotifications(
       folder, 1, null, EventType.NewMail); 

     GetEventsResults events = subscription.getEvents(); 
     System.out.println("####### EVENTS: " 
       + events.getItemEvents().toString()); 
     for (ItemEvent itemEvent : events.getItemEvents()) { 
      if (itemEvent.getEventType() == EventType.NewMail) { 
       EmailMessage message = EmailMessage.bind(service, 
         itemEvent.getItemId()); 
       System.out.println("######## NEW EMAIL MESSAGE IS: " 
         + message.getSubject()); 
      } 
     } 

aber die events.getItemEvents() immer leer ist, auch kann ich neue E-Mails im Posteingang sehen. auch, wie der oben genannte Code immer wiederholt wird, während die Anwendung ausgeführt wird, so dass es jede Minute nach neuen E-Mails suchen.

Antwort

1

Hier hängt es davon ab, wann Sie dies aufrufen, wenn Sie dies als ein bestimmtes Intervall bezeichnen, dann müssen Sie "WaterMark" der vorherigen Antwort in einer neuen Anfrage übergeben, sonst würden alle Ereignisse dazwischen verloren gehen. Methode: subscription.getWaterMark()

müssen dies als thrid Argument Methode subscribeToPullNotifications() übergeben

sonst können Sie kontinuierlich auf dem gleichen Dienst ziehen, indem die in der Schleife:

while (true) { 

    GetEventsResults events = null; 

    try { 
     events = subscription.getEvents(); 
    } catch (Exception e1) { 
     e1.printStackTrace(); 
    } 

    for (ItemEvent itemEvent : events.getItemEvents()) { 
     // do something... 
    } 

} 

Aber dies würde kontinuierlich vom Server zunehmende Belastung ziehen, so lieber ersten Ansatz durch Abonnement in regelmäßigen Abständen zu verwenden, und p vorherige Wasserzeichen auf Anfrage vergeben.