मैं एक एस्केक पैकेट के लिए श्रोता लिखने की कोशिश कर रहा हूं। क्या हो रहा है यह है कि श्रोताओं को कभी-कभी पैकेट नहीं मिलता है और इसे संसाधित नहीं किया जाता है। यहाँ कोड के कुछ है:स्मैक पैकेट श्रोता नहीं चल रहा
try {
XMPPMethods.getConnection().addPacketListener(new PacketListener() {
@Override
public synchronized void processPacket(Packet packet) {
if (packet.getPacketID().equals(lastCustomIQId)) {
android.os.Message msg = new android.os.Message();
msg.obj = privateData;
msg.what = XMPPMethods.ADD_CONTACT_RESULTS;
AddContact.addContactHandler.sendMessage(msg);
}
}
}, new PacketIDFilter(lastCustomIQId));
ध्यान दें कि यह doInBackground (स्ट्रिंग ... पैरामीटर) एक asynctask के हिस्से के अंदर है।
पैकेट का उपयोग कर भेजा जा रहा है:
JIDIQ.setPacketID(lastCustomIQId);
JIDIQ.setFrom(XMPPMethods.getCurrentUserFullUserName());
JIDIQ.setType(Type.GET);
XMPPMethods.getConnection().sendPacket(JIDIQ);
कहाँ JIDIQ एक asmack बुद्धि है। यह कोड सही समय के साथ सही ढंग से चलता है। लेकिन कभी-कभी पैकेट लिस्टनर को केवल पैकेट भेजा नहीं जाता है। मैं सोच रहा हूं कि मुझे इसके बजाय पैकेट कोलेक्टर का उपयोग करना चाहिए, या अगर श्रोता किसी भी तरह मर रहा है। क्या किसी को पता है कि यह पैकेट क्यों नहीं मिलेगा? इस विषय के किसी भी ज्ञान की सराहना की जाएगी!
मैंने इसका परीक्षण किया है, और पैकेट आईडी हमेशा फ़िल्टर आईडी से मेल खाता है। मैंने आईडी के रूप में निरंतर उपयोग करने और एक अलग प्रकार के फ़िल्टर का उपयोग करने का भी प्रयास किया है। सभी तीन फ़िल्टर सेटिंग्स एक ही परिणाम प्राप्त करते हैं। नोट: गतिविधि दर्ज करते समय, यदि पैकेट पहली बार प्राप्त होता है, तो इससे कोई फर्क नहीं पड़ता कि मैं कितनी बार आईक्यू से पूछता हूं और पैकेट भेजता हूं, यह हर बार काम करेगा। उलटा भी सच है, जब मैं गतिविधि में प्रवेश करता हूं और पैकेट श्रोता द्वारा उठाया नहीं जाता है, तो भविष्य के आईक्यू पैकेट श्रोता द्वारा प्राप्त नहीं होंगे। –
@ जोनाथन कॉर्नवेल क्या आपने जांच की है कि कनेक्शन जहां आप श्रोता पंजीकृत करते हैं, वही है जो पैकेट प्राप्त करता है? (उदाहरण के लिए, क्लाइंट डिस्कनेक्ट हो जाता है और फिर कनेक्ट हो जाता है क्योंकि कनेक्टिविटी बदलती है, लेकिन नए कनेक्शन में श्रोता नहीं होता है) –
मैंने इसका परीक्षण भी किया है, लेकिन कनेक्शन कभी नहीं बदलता है। मैंने इसे भी बनाया ताकि सभी गतिविधियों को कनेक्शन के सार्वजनिक संस्करण तक पहुंच हो ताकि यह सुनिश्चित किया जा सके कि कनेक्शन एक ही परिणाम के साथ कभी नहीं बदलता है। अपडेट: ऐसा लगता है कि जब मैं गतिविधि खोलता हूं और श्रोता चलता है, तो यह भेजे गए प्रत्येक पैकेट के लिए यह सही ढंग से चलाया जाएगा। लेकिन जब श्रोता नहीं चलता है, तो यह भेजे गए प्रत्येक पैकेट के लिए नहीं चलेगा। गतिविधि को बंद करना और फिर से खोलना इस (काम कर रहा/काम नहीं कर सकता) बदल सकता है, लेकिन अजीब चीज यह है कि गतिविधि खोलना/बंद करना श्रोता को प्रभावित करने वाली किसी भी चीज को नहीं बदलेगा। –