asmackパケットのリスナーを作成しようとしています。最終的に発生するのは、リスナーがパケットを取得して処理しない場合があります。コードの一部を次に示します。
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(string ... params)部分の内部にあることに注意してください。
パケットは以下を使用して送信されています:
JIDIQ.setPacketID(lastCustomIQId);
JIDIQ.setFrom(XMPPMethods.getCurrentUserFullUserName());
JIDIQ.setType(Type.GET);
XMPPMethods.getConnection().sendPacket(JIDIQ);
JIDIQがasmackIQである場合。このコードはすべて、ほとんどの場合正しく実行されます。ただし、PacketListenerが送信されたパケットを受信しない場合があります。代わりにPacketCollectorを使用する必要があるのか、それともリスナーがどういうわけか死にかけているのか疑問に思っています。なぜこれがパケットを受信しないのか誰かが知っていますか?この主題についての知識があれば大歓迎です!