J'essaie d'écrire un programme d'écoute pour un paquet asmack. Ce qui finit par arriver, c'est que parfois l'auditeur n'obtient pas le paquet et le traite. Voici le code:Le programme d'écoute de paquets Smack ne fonctionne pas
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));
Notez que c'est à l'intérieur de la doInBackground (string ... params) partie d'un AsyncTask.
Le paquet est envoyé en utilisant:
JIDIQ.setPacketID(lastCustomIQId);
JIDIQ.setFrom(XMPPMethods.getCurrentUserFullUserName());
JIDIQ.setType(Type.GET);
XMPPMethods.getConnection().sendPacket(JIDIQ);
Lorsque le JIDIQ est un QI de asmack. Ce code fonctionne correctement dans la plupart des cas. Mais parfois, le PacketListener ne reçoit pas le paquet envoyé. Je me demande si je devrais utiliser un PacketCollector à la place, ou si l'auditeur est en train de mourir. Est-ce que quelqu'un sait pourquoi cela ne recevrait pas le paquet? Toute connaissance de ce sujet serait grandement appréciée!
J'ai testé cela, et l'ID de paquet correspond toujours à l'ID de filtre. J'ai aussi essayé d'utiliser une constante comme ID et d'utiliser un autre type de filtre. Les trois paramètres de filtre obtiennent le même résultat. Remarque: Lors de la saisie de l'activité, si le paquet est reçu la première fois, peu importe le nombre de fois que j'interroge le QI et envoie le paquet, il fonctionnera à chaque fois. L'inverse est également vrai, quand j'entre dans l'activité et que le paquet ne soit pas capté par l'écouteur, tous les futurs paquets IQ ne seront pas reçus par l'écouteur. –
@JonathanCornwell Avez-vous vérifié si la connexion où vous enregistrez l'écouteur est la même que celle qui reçoit le paquet? (par exemple, le client se déconnecte puis se reconnecte car la connectivité change, mais la nouvelle connexion n'a pas l'écouteur) –
J'ai testé cela aussi, mais la connexion ne change jamais. J'ai même fait en sorte que toutes les activités aient accès à une version publique de la connexion pour s'assurer que la connexion ne change jamais avec les mêmes résultats. Mise à jour: Il semble que lorsque j'ouvre l'activité et que l'écouteur s'exécute, il fonctionne correctement pour chaque paquet qui lui est envoyé. Mais lorsque l'écouteur ne s'exécute pas, il ne s'exécute pas pour chaque paquet qui lui est envoyé. Fermer et rouvrir l'activité peut changer cela (travailler/ne pas fonctionner), mais la chose étrange est que l'ouverture/fermeture de l'activité ne change rien qui affecte l'auditeur. –