【问题标题】:How to remove packet listeners of XMPPClient using Smack如何使用 Smack 删除 XMPPClient 的数据包侦听器
【发布时间】:2013-07-18 01:28:36
【问题描述】:

我使用 XMPP server(openFire)Smack 开发了一个聊天应用程序。为了获取传入的消息,我曾经 PacketFilter 这是传入的味精代码:-

PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
        connection.addPacketListener(new PacketListener() {
            public void processPacket(Packet packet) {
                Message message = (Message) packet;
                incomemsg = message.getBody();
                if (incomemsg != null) {
                    String fromName = StringUtils.parseBareAddress(message.getFrom());
                    frmname =  message.getBody();
                    Log.i("XMPPClient", "Got text [" + message.getBody() + "] from [" + fromName + "]");
                    // Add the incoming message to the list view
                    mHandler.post(new Runnable() {
                        public void run() {
                            // show the msg of chat in right side.
                              showMessage(frmname,false);
                              scrollContainer.getFocusables(scrollContainer.getChildCount());
                        }
                    });

                }
            }
        }, filter);

但我想在活动关闭或停止或销毁期间删除 paketListener。我按照http://community.igniterealtime.org/thread/28921 删除数据包侦听器 但没有找到解决方案。

请检查。谢谢你的时间。

【问题讨论】:

  • 不使用Connection.removePacketListener有什么原因吗?
  • 不是,但我该如何使用。因为我没有 packetListener 的对象。
  • 所以我想在 onStop() 中使用。
  • 您需要将 PacketListener 实例存储在类变量中,而不是仅创建本地实例。
  • 谢谢,但我不想这样做。可以换个方式吗?

标签: android xmpp smack asmack


【解决方案1】:

你可以从这里开始:

public class YourClass {
    private PacketListener packetListener;
    ....
}

然后一旦你想实例化 PacketListener:

packetListener = new PacketListener(
....
);
connection.addPacketListener(packetListener);

以及删除它:

connection.removePacketListener(packetListener);

【讨论】:

  • 如果我在只收到一条消息后删除我的监听器,它只会收到一条消息。但服务器端离线消息变空。我正在使用 ejabberd 服务器。你能告诉我为什么吗 ? @harism
【解决方案2】:

你可以试试这个,它对我有用:`

PacketFilter filter;
PacketListener packetListener;
filter = new MessageTypeFilter(Message.Type.chat);
packetListener = new PacketListener() {
                                public void processPacket(Packet packet) {
                                    // do something with your packet here
                                    Message message = (Message)packet;
                                    String from  = message.getFrom();
                                    String body = message.getBody();
                                    System.out.println("Message from: " + from + " " + body);
                                }
                            };
                            connection.addPacketListener(packetListener, filter);
//And when you want to remove it:
connection.removePacketListener(packetListener);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多