2012-11-18 7 views
7

próbuję wykrywania nowych wiadomości w skrzynce odbiorczej przy użyciu subscribeToPullNotifications następująco:subscribeToPullNotifications nie wykrywa nowe wiadomości w skrzynce odbiorczej

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

ale events.getItemEvents() jest zawsze pusty, nawet widzę nowe wiadomości w skrzynce odbiorczej. również, jak sprawić, aby powyższy kod był zawsze powtarzany podczas działania aplikacji, tak aby w każdej minucie sprawdzać nowe wiadomości e-mail.

Odpowiedz

1

To zależy od tego, kiedy to wywołasz, jeśli przypuśćmy, że nazywasz to jako konkretny interwał, musisz przekazać "Watermark" poprzedniej odpowiedzi w nowym żądaniu, w przeciwnym razie wszystkie zdarzenia, które zaszły pomiędzy, zostaną utracone. metoda: subscription.getWaterMark()

trzeba przekazać to jako argument do subscribeToPullNotifications Thrid() metoda

indziej można stale ciągnąć na tej samej usługi poprzez umieszczenie że w pętli:

while (true) { 

    GetEventsResults events = null; 

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

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

} 

Ale to będzie ciągnąć od serwera zwiększającego obciążenie, więc raczej skorzystaj z pierwszego podejścia, subskrybując w regularnych odstępach, a p przypinanie poprzedniego znaku wodnego na żądanie.

Powiązane problemy