2016-02-18 4 views
5

Hallo Ich bin mit der Logik der Implementierung chatManagerListener Schnittstelle in einem Service verwirrt. Unten ist mein Service-Code:So erhalten Sie eine Nachricht ohne createChat für Android XMPP Chat Smack api

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); 
} 



} 

Jedes Mal, wenn ein Paket senden Ich erhalte diese folgende Ausnahme .Ich kno nicht, warum seine

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 einfachen Worten entstehen Ich möchte wissen, wie man ChatMessage Zuhörer in der service.Please implementieren sein Art

Antwort

2

Sie müssen createchat, sobald Sie erfolgreich verbunden &

authentifiziert

Sobald Sie die Instanz ChatManager erhalten haben.Für die Paketübertragung müssen Sie createchat mit Peer/Gruppenüberprüfung this link für Methode zu createchat.

chatManager = ChatManager.getInstanceFor(abstractXMPPConnection); 

newChat = chatmanager.createChat(userid, chatManagerListener); 

, sobald Sie die Chat Instanz erhalten Sie Paket senden & Ihre retrive auf chatmanagerListner

von newChat können Sie sendMessage

To get Package (message, chat)

Sie können Code unten versuchen, wenn Ihre Verbindung/Authentifizierung Prozess ist erfolgreich abgeschlossen als

UPDATE

können Sie versuchen, PacketListener verwenden.

Die Methode addPacketListener von XMPPConnection check this link for details.

hinzufügen PacketListener zu XMPPConnection mit PacketFilter Typ Nachricht

Aber bevor packetlistner Hinzufügen entfernen, wenn bereits eine Instanz in xmppconnection hinzugefügt.

prüfen Code unten

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(); 
     } 
    } 
+0

nach dir, ich dieses oben Code in 'public void authentifiziert (XMPPConnection Verbindung, boolean wieder aufgenommen)' –

+0

Ihr Code einen Chat mit bekannten tatsächlich schafft 'schreiben sollte userJid ', was ist mit dem Abhören von Nachrichten von unbekannten 'userJid' –

+0

@ChrisRedField überprüfen Update auf die Antwort kann es Ihnen helfen – user1140237

Verwandte Themen