How to get a message without using createChat for android XMPP chat smack api

Hi, I am confused with the implementation logic of the chatManagerListener interface inside the Service . The following is the service code:

 public class MyService3 extends Service { ChatManager chatManager; ChatManagerListener chatManagerListener; AbstractXMPPConnection abstractXMPPConnection; MyXmpp2 myXmpp2; public MyService3() { } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d("Myservice3:","Started"); abstractXMPPConnection = myXmpp2.getConnection(); abstractXMPPConnection.addConnectionListener(new ConnectionListener() { @Override public void connected(XMPPConnection connection) { Log.d("XMPPConnection:","connected"); } @Override public void authenticated(XMPPConnection connection, boolean resumed) { Log.d("XMPPConnection:","authenticated"); //Once authenticated start listening for messages } @Override public void connectionClosed() { Log.d("XMPPConnection:","connectionClosed"); } @Override public void connectionClosedOnError(Exception e) { Log.d("XMPPConnection:","connectionClosedOnError"); } @Override public void reconnectionSuccessful() { Log.d("XMPPConnection:","reconnectionSuccessful"); } @Override public void reconnectingIn(int seconds) { Log.d("XMPPConnection:","reconnectingIn"); } @Override public void reconnectionFailed(Exception e) { Log.d("XMPPConnection:","reconnectionFailed"); } }); Log.d("isOnline:", myXmpp2.getConnection().isConnected() + ""); chatManager = ChatManager.getInstanceFor(abstractXMPPConnection); chatManager.addChatListener(chatManagerListener); chatManagerListener = new ChatManagerListener() { @Override public void chatCreated(Chat chat, boolean createdLocally) { chat.addMessageListener(new ChatMessageListener() { @Override public void processMessage(Chat chat, Message message) { Log.d("Hello::","World"); //NOT WORKNIG if(message.getBody()!=null) { Log.d("Message::",message.getBody()); } } }); } }; return super.onStartCommand(intent, flags, startId); } } 

Whenever I send a packet, I get the following exception. I do not know why its occurrence

 Exception in packet listener java.lang.NullPointerException: Attempt to invoke interface method 'void org.jivesoftware.smack.chat.ChatManagerListener.chatCreated(org.jivesoftware.smack.chat.Chat, boolean)' on a null object reference at org.jivesoftware.smack.chat.ChatManager.createChat(ChatManager.java:255) at org.jivesoftware.smack.chat.ChatManager.createChat(ChatManager.java:287) 

In simple terms, I want to know how to implement the ChatMessage listener in a service. Please be kind

+5
source share
1 answer

You need to create a chat after successful connection and authentication

Once you have received an instance of ChatManager . To transfer a package, you need createchat with peer / group checking this link for the create method.

  chatManager = ChatManager.getInstanceFor(abstractXMPPConnection); newChat = chatmanager.createChat(userid, chatManagerListener); 

after receiving the Chat instance, you can send the package and upload it to chatmanagerListner

from newChat you can sendMessage

Receive package (message, chat)

You can try to execute the code below if the connection / authentication process is successful than

 final Chat newChat = ChatManager.getInstanceFor(xmppConn).createChat(userJid, new MessageListener() { @Override public void processMessage(final Chat arg0, final Message arg1) { LOG.info("Sent message: " + arg1.getBody()); } }); try { final Message message = new Message(); message.setFrom(chatProperties.getDomain()); message.setTo(userJid); message.setType(Type.normal); message.setBody(text); message.setSubject(""); newChat.sendMessage(message); xmppConn.disconnect(); } catch (final Exception e) { LOG.error("Error while sending message to " + userName + ": ", e); } 

UPDATE

You can try using PacketListener .

XMPPConnection addPacketListener check this link .

Add PacketListener to XMPPConnection with PacketFilter message

But before adding packagelistner, delete if any instance has already been added to xmppconnection.

Check code below

 private PacketListener packetListener = new PacketListener() { @Override public void processPacket(Packet packet) { if (packet instanceof Message) { Message message = (Message) packet; String chatMessage = message.getBody(); } } }; private void regiSterPackateListner() { PacketTypeFilter filter = new PacketTypeFilter(Message.class); try { if (packetListener != null) { //Avoid adding multiple packetlistner abstractXMPPConnection.removePacketListener(packetListener); } abstractXMPPConnection.addPacketListener(packetListener, filter); } catch (Exception e) { e.printStackTrace(); } } 
+2
source

Source: https://habr.com/ru/post/1243297/


All Articles