powered by Jive Software

Roster.getEntry() can''t handle addr supplied to RstListener.presenceChanged


RosterListener’'s methods get XMPP addresses rather than RosterEntrys as parameters. For example,


could be called. Now the documentation of Roster.getEntry(address) claims that address can be in any valid format, including the above “foo@laptop/Smack”. However looking at the sourcecode of Roster.getEntry(), this seems to be incorrect: It just does a (case insensitive) String compare. Therefore,


will return null even if the roster contains an entry “foo@laptop”.

Also, I wonder how I should handle the RosterListener.entriesDeleted() event, as at that time I can’'t get the corresponding roster entries any more, can I?

Thanks in advance.



You could try a



in order to use the correct JID.

You question about RosterListener#entriesDeleted is a good one. Currently I am not using it. When an entry gets deleted its not on my roster anymore, so when I’'m displaying the Roster if its been deleted it will no longer appear.

I wonder if anyone can point out the correct way in using entriesDeleted?

I’'m not sure if you understood my question correctly. I think there is an error in Roster.getEntry(). Specifically, Roster.getEntry(String user) should call

user = StringUtils.parseBareAddress(user);

before proceeding any further.