
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)); 请注意,这是在asInctask的doInBackground(string … params)部分内部.
数据包正在使用以下方式发送:
JIDIQ.setPacketID(lastCustomIQID);JIDIQ.setFrom(XMPPMethods.getCurrentUserFullUsername());JIDIQ.setType(Type.GET);XMPPMethods.getConnection().sendPacket(JIDIQ);
JIDIQ是一个asmack IQ.这段代码大部分时间都正确运行.但有时PacketListener只是没有收到发送的数据包.我想知道我是否应该使用PacketCollector,或者如果监听器以某种方式死亡.有谁知道为什么这不会收到数据包?任何有关此主题的知识将不胜感激!
解决方法 如果您的其他数据包侦听器正在抛出异常,则会发生这种情况.每当一个数据包进入某个线程中的所有数据包侦听器的命中时,就会出现一个for循环内部的数据包.如果在数据包侦听器中抛出异常,则会中止该线程,并且不会触发其他数据包侦听器.
检测这种情况的最彻底的方法是重新编译smack并在PacketReader.java中添加错误处理程序.
这是相关的代码部分.您可以看到抛出的任何异常都会导致线程中止,因为没有错误处理.
private class ListenerNotification implements Runnable { private Packet packet; public ListenerNotification(Packet packet) { this.packet = packet; } public voID run() { for (ListenerWrapper ListenerWrapper : connection.recvListeners.values()) { ListenerWrapper.notifyListener(packet); } }} 总结 以上是内存溢出为你收集整理的android – Smack数据包侦听器未运行全部内容,希望文章能够帮你解决android – Smack数据包侦听器未运行所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)