在android上通过xmpp发送和接收消息 [英] sending and receiving message through xmpp on android

查看:38
本文介绍了在android上通过xmpp发送和接收消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是聊天应用程序的初学者.我搜索并研究了 xmpp 服务器.我安装了 openfire xmpp 服务器.与xmpp服务器的连接,注册和登录任务就完成了.现在我正在尝试发送和接收消息.用户登录后,然后用户输入要发送的文本.我用这个代码发送消息

I am a beginner for chatting app. I searched and studied xmpp servers. I installed openfire xmpp server. The connection with xmpp server, registration and login tasks are done. Now i am trying to send and receive message. After user gets login and after that as user enters text to send. I used this code to send message

    ChatManager chatmanager;
    chatmanager = connection.getChatManager();
    Chat newChat = chatmanager.createChat("cac6ba9dc9c6ac67"+"@pc", FirstPage.this);

                try {
                    newChat.sendMessage("Howdy!");
                }
                catch (XMPPException e) {
                    System.out.println("Error Delivering block");
                }

@Override
    public void processMessage(Chat chat, Message message) {
        // TODO Auto-generated method stub
        Toast.makeText(FirstPage.this,"mssg: "+message.getBody(), Toast.LENGTH_SHORT).show();
        switch (message.getType())
        {
        case chat:
            String jsonData = (null==message.getBody())?"":message.getBody();

            System.out.println(jsonData);
            System.out.println(chat.getParticipant());
            break;
        case error:
            break;
        case groupchat:
            break;
        case headline:
            break;
        case normal:

            break;
        }
    }

以及我用于接收消息的代码,请查看此屏幕截图以查看用户,

and this code I am using for receiving message, kindly see over this screenshot to see users,

chatmanager.addChatListener(this);
        PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
        connection.addPacketListener(this, filter);

@Override
    public void chatCreated(Chat chat, boolean createdlocally) {
        // TODO Auto-generated method stub
        // System.out.println("1 message received "+chat.getParticipant());

        if (!createdlocally) {
            System.out.println("not created locally");
            Toast.makeText(FirstPage.this, "not created locally", Toast.LENGTH_SHORT).show();
            chat.addMessageListener(new MessageListener() {

                @Override
                public void processMessage(Chat arg0, Message arg1) {
                    // TODO Auto-generated method stub
                    //tv1.setText(arg1.getBody());
                }
            });
        } else {
            Toast.makeText(FirstPage.this, "created locally", Toast.LENGTH_SHORT).show();
            System.out.println("created locally");
        }
    }

    @Override
    public void processPacket(Packet packet) {
        // TODO Auto-generated method stub
        System.out.println("in processPacket");
        Message message = (Message) packet;
        String body = message.getBody();
        String from = message.getFrom();
        tv1.setText("From "+from + "\n"+ body);
    }

我正在使用此代码,不知道为什么消息没有通过另一端发送谁能告诉我犯了什么错误或帮助解决这个问题

I am using this code don't know why the message is not sending over other side Can anyone please tell what mistake I am making or help in solving this problem

推荐答案

我为此找到了这个解决方案:

I found this solution for this:

用于发送消息

private ArrayList<String> messages = new ArrayList<String>();
    private Handler mHandler = new Handler();
@Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.btnsendmsg:

            String to = "cac6ba9dc9c6ac67@pc";

            String text = edgetmsg.getText().toString();
            Message msg = new Message(to, Message.Type.chat);
            msg.setBody(text);
            if (connection != null) {
                connection.sendPacket(msg);
                messages.add(connection.getUser() + ":  " + text);
                //messages.add(connection.getUser() + ":");
                //messages.add(text);
                Log.v("text send", connection.getUser().toString());
                Toast.makeText(FirstPage.this, "txt send",
                        Toast.LENGTH_SHORT).show();
                setListAdapter();
                Roster roster = connection.getRoster();
                Collection<RosterEntry> entries = roster.getEntries();
                for (RosterEntry entry : entries) {
                    Log.d("XMPPChatDemoActivity",
                            "--------------------------------------");
                    Log.d("XMPPChatDemoActivity", "RosterEntry " + entry);
                    Log.d("XMPPChatDemoActivity",
                            "User: " + entry.getUser());
                    Log.d("XMPPChatDemoActivity",
                            "Name: " + entry.getName());
                    Log.d("XMPPChatDemoActivity",
                            "Status: " + entry.getStatus());
                    Log.d("XMPPChatDemoActivity",
                            "Type: " + entry.getType());
                    Presence entryPresence = roster.getPresence(entry
                            .getUser());
                    Log.d("XMPPChatDemoActivity", "Presence Status: "
                            + entryPresence.getStatus());
                    Log.d("XMPPChatDemoActivity", "Presence Type: "
                            + entryPresence.getType());
                    Presence.Type type = entryPresence.getType();
                    if (type == Presence.Type.available)
                        Log.d("XMPPChatDemoActivity", "Presence AVIALABLE");
                    Log.d("XMPPChatDemoActivity", "Presence : "
                            + entryPresence);
                    // entryPresence.setPriority(1);
                    // connection.sendPacket(entryPresence);
                    // Toast.makeText(XMPPChatDemoActivity.this,
                    // "gettting user", Toast.LENGTH_SHORT).show();
                }

            } else {
                Log.i("XMPPChatDemoActivity", "no massage send");
                Log.e("XMPPChatDemoActivity", "Failed to log in as "
                        + connection.getUser());
            }

            break;
        }
    }

调用 setConnection(connection);获得用户登录后

call setConnection(connection); after getting user login

用于接收消息:

public void setConnection(XMPPConnection connection) {
        this.connection = connection;
        if (connection != null) {
            // Add a packet listener to get messages sent to us
            PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
            connection.addPacketListener(new PacketListener() {
                @Override
                public void processPacket(Packet packet) {
                    Message message = (Message) packet;
                    if (message.getBody() != null) {
                        String fromName = StringUtils.parseBareAddress(message
                                .getFrom());
                        Log.i("XMPPChatDemoActivity", "Text Recieved "
                                + message.getBody() + " from " + fromName);
                        messages.add(fromName + ":  " + message.getBody());
                        //messages.add(fromName + ":");
                        //messages.add(message.getBody());
                        // Add the incoming message to the list view
                        mHandler.post(new Runnable() {
                            public void run() {
                                setListAdapter();
                            }
                        });
                    }
                }
            }, filter);
        }
    }

这篇关于在android上通过xmpp发送和接收消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆