2012-11-18 31 views
7

में नए ईमेल पता नहीं लगा पाया मैं इस प्रकार subscribeToPullNotifications का उपयोग कर इनबॉक्स में नए ईमेल पता लगाने के लिए कोशिश कर रहा हूँ:subscribeToPullNotifications इनबॉक्स

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

लेकिन events.getItemEvents() हमेशा खाली है, मैं भी इनबॉक्स में नए ईमेल देख सकते हैं। एप्लिकेशन चालू होने पर उपरोक्त कोड को हमेशा दोहराया जाता है, ताकि प्रत्येक मिनट यह नए ईमेल की जांच कर सके।

उत्तर

1

यहां यह इस बात पर निर्भर करता है कि आप इसे कब कॉल कर रहे हैं, अगर आपको लगता है कि आप इसे विशेष अंतराल के रूप में बुला रहे हैं तो आपको नए अनुरोध में पिछली प्रतिक्रिया के "वाटरमार्क" को पारित करने की आवश्यकता है, अन्यथा जो घटनाएं हुईं, वे सभी खो जाएंगी। विधि: subscription.getWaterMark()

विधि subscribeToPullNotifications()

वरना आप लगातार रखकर ही सेवा पर खींच सकते हैं करने के लिए तृतीय तर्क के रूप में यह पारित करने के लिए की जरूरत है कि पाश में:

while (true) { 

    GetEventsResults events = null; 

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

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

} 

लेकिन यह लगातार सर्वर बढ़ते लोड से खींचता है, इसलिए नियमित अंतराल पर सदस्यता लेने के द्वारा पहले दृष्टिकोण का उपयोग करें, और पी अनुरोध में पिछले पानी के निशान का आकलन।