Cannot get list of public rooms from xmpp Server on Android?

前端 未结 2 1139
孤独总比滥情好
孤独总比滥情好 2021-01-01 05:56

Hello Everyone i am new to android and i am currently stuck on this. I have to return list of public rooms created on xmpp server. The problem i am having is that the code b

相关标签:
2条回答
  • 2021-01-01 06:15

    I have found the Solution to the problem.

    The Android asmack library was using this in getHostedRooms(Connection connection, String serviceName) method

    ServiceDiscoveryManager discoManager =ServiceDiscoveryManager.getInstanceFor(connection);
    

    i replaced it with

    ServiceDiscoveryManager discoManager = new ServiceDiscoveryManager(connection);
    

    For those who are confused where this method is its in

    Package: org.jivesoftware.smackx.muc

    File: MultiUserChat.java

    After you have done this. We have to register all the providers in Android whose detail can be found here. These providers are automatically registered when are using JAVA's smack library (In java Development) but in Android we have to register them ourself.

    0 讨论(0)
  • 2021-01-01 06:25

    The problem is that the static block of the ServiceDiscoveryManager class has to be evaluated before any connection is created. In smack this is done via an configuration file, but this approach does not work on Android and therefore on aSmack.

    The workaround mentioned in the answer is somehow ugly, since you really don't want to use the Constructor to fetch the SDM object, instead the get() method should be used. But the get() method only works if there was actually a SDM created for the connection.

    So in order to init the SDM correctly on Android you need to call the full forName notation to init the static blocks of the class before you create the first (XMPP)Connection object.

    Class.forName("org.jivesoftware.smackx.ServiceDiscoveryManager", true, ClassLoader.getSystemClassLoader()):
    

    This is tracked as aSmack Issue 8

    0 讨论(0)
提交回复
热议问题