Rahul Lohra
Rahul Lohra

Reputation: 854

Smack API ,ChatMessageListener interface not working properly

I am a beginner in smack api , and I have already wasted 1 day experimenting with it and understanding it .Please be kind

the below method is not getting invoked :

@Override
public void processMessage(Chat chat, Message message) {
    Log.d("processMessage234:", "Getting Message here");

}

below is my full java code:

public class Activity2 extends AppCompatActivity implements ChatManagerListener,ChatMessageListener,PacketListener {

MyXmpp2 myXmpp2;
Button isOnline;
AbstractXMPPConnection connection;
ChatManager chatManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_2);
    isOnline = (Button) findViewById(R.id.button6);
    myXmpp2 = new MyXmpp2();


}

@Override
protected void onResume() {
    super.onResume();


    isOnline.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            connection = myXmpp2.getConnection();
            Log.d("isOnline:", myXmpp2.getConnection().isConnected() + "");

            chatManager = ChatManager.getInstanceFor(connection);
            Chat c = chatManager.createChat("baba@abc", new ChatMessageListener() {
                @Override
                public void processMessage(Chat chat, Message message) {
                    Log.d("processMessage000:", "Getting Message here");
                }
            });

            try {
                c.sendMessage("lol");
                //This is working fine
            } catch (SmackException.NotConnectedException e) {
                e.printStackTrace();
            }
        }

    });

}

@Override
public void chatCreated(Chat chat, boolean createdLocally) {

    if (!createdLocally) {
        chat.addMessageListener(new ChatMessageListener() {
            @Override
            public void processMessage(Chat chat, Message message) {
                Log.d("processMessage:", "Getting Message here");
            }
        });
    }
}

@Override
public void processMessage(Chat chat, Message message) {
    Log.d("processMessage234:", "Getting Message here");
//This is not getting invoked

}

@Override
public void processPacket(Stanza packet) throws SmackException.NotConnectedException {
    Log.d("processPacket:", "Getting Packets here");
}

}

I can read in the log the packets packets sent and packets received as below:

D/SMACK: SENT (0): <message to='baba@abc ......
D/SMACK: SENT (0): <message from='baba@abc ......

But i am unable to invoke the method

void processMessage(Chat chat, Message message){.....  }

Any Suggestion is very helpful :)

Upvotes: 1

Views: 310

Answers (2)

Mack94
Mack94

Reputation: 91

@Override
public void processMessage(Chat chat, Message message) {
    Log.d("processMessage234:", "Getting Message here");

}

I don't understand well what are you trying to do but it isn't invoked because it need to be invoked in ChatMessageListener. It need to work on different thread than the whole app, due to constant listening.

Here you are running new thread, so it should work and should listening to the incoming messages.

chat.addMessageListener(new ChatMessageListener() {
    @Override
    public void processMessage(Chat chat, Message message) {
        Log.d("processMessage:", "Getting Message here");
    }
});

Please explain more, I will try to help!

Upvotes: 1

Rahul Lohra
Rahul Lohra

Reputation: 854

Thanks Mack94 for saving my day, I am uploading my full code to help others

public class Activity2 extends AppCompatActivity {

MyXmpp2 myXmpp2;
Button isOnline;
AbstractXMPPConnection connection;
ChatManager chatManager;
ChatManagerListener chatManagerListener;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_2);
    isOnline = (Button) findViewById(R.id.button6);
    myXmpp2 = new MyXmpp2();



}

@Override
protected void onResume() {
    super.onResume();


    isOnline.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            connection = myXmpp2.getConnection();
            Log.d("isOnline:", myXmpp2.getConnection().isConnected() + "");


            chatManager = ChatManager.getInstanceFor(connection);
            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");
                    if(message.getBody()!=null)
                    {
                        Log.d("Message::",message.getBody());

                    }
                }
            });
        }
    };

}

}

Upvotes: 3

Related Questions