2016-07-21 23 views
0

Ich versuche, Chat-App zu erstellen. - Ich installierte Openfire-Server in meinem lokalen Rechner - Und fügte hinzu, einige Benutzer über OpenFire-Server-Admin-Panel - Jetzt versuche ich alle verfügbaren Benutzer in Android-Emulator anzuzeigen. - Ich kann mit openfire Server usign aSmack lib verbinden. Aber Fehler bei connection.getRoster();.wie openfire online registrierte Benutzer von Android-Client mit einem Smack?

 ConnectionConfiguration config = new ConnectionConfiguration("10.42.0.3", 5222, "localhost"); 
     connection = new XMPPConnection(config); 

     try { 
      connection.connect(); 
      Log.d("SMACK ", " CONNECTED"); 


     // list online contacts 
      Roster roster = connection.getRoster(); 
      Collection<RosterEntry> entries = roster.getEntries(); 
      Log.d("TRACE", "entries.size()=" + entries.size()); 
      for (RosterEntry e : entries) { 
       Log.d("PRESENCE", e.getUser() + "=" + roster.getPresence(e.getUser()).isAvailable()); 
       if (roster.getPresence(e.getUser()).isAvailable()) { 
        Log.d("ADD", "NAME_KEY=" + e.getName() + " USERJID_KEY=" + e.getUser()); 
        //contacts.add(contact); 
       } 
      } 
     } 
     catch (XMPPException e){ 
      Log.e("XMPPChatDemoActivity", "Failed to connect to "+ connection.getHost()); 
      Log.e("XMPPChatDemoActivity", e.toString()); 
     } 

Dieser Code gibt mir Fehler auf dieser Linie connection.getRoster(); wurde nicht gefunden.

hier ich meine Abhängigkeiten

compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:appcompat-v7:22.2.1' 
compile 'com.android.support:design:22.2.1' 
compile 'com.google.android.gms:play-services:8.3.0' 

compile "org.igniterealtime.smack:smack-java7:4.1.0" 
// Optional for XMPPTCPConnection 
compile "org.igniterealtime.smack:smack-tcp:4.1.0" 
// Optional for XMPP-IM (RFC 6121) support (Roster, Threaded Chats, …) 
compile "org.igniterealtime.smack:smack-im:4.1.0" 
// Optional for XMPP extensions support 
compile "org.igniterealtime.smack:smack-extensions:4.1.0" 
+0

Wenn Sie "alla verfügbare Benutzer" in Server mögen, Sie müssen in Openfire JABBER SEARCH (search.jar plugin) installieren, oft ist es Bündel und dann implementieren Sie die Forschung. Roster ist etwas anderes. – MrPk

Antwort

1

Smack keine solche Funktion. Sie können jedoch mithilfe der REST-API eine Benutzerliste abrufen. Installieren Sie dazu das Rest-API-Plugin serverseitig aus dem Plugin-Repository. Dann in Client-Seite hinzufügen rest api client,

Maven:

<dependency> 
    <groupId>org.igniterealtime</groupId> 
    <artifactId>rest-api-client</artifactId> 
    <version>1.1.3</version> 
</dependency> 

Gradle:

compile 'org.igniterealtime:rest-api-client:1.1.3' 

Beispiel:

AuthenticationToken token = new AuthenticationToken("rest_api_token"); 
RestApiClient client = new RestApiClient("host", port, token); 
UserEntities entities = client.getUsers(); // UserEntities have all users list including admin. 

** In Kürze erhalten Sie Rest Rest api api Token in Server erhalten Sektion.

0

Sie können nicht alle Register Benutzer auf dem Server von Roster bekommen, weil ein Roster anders ist. Ein Dienstplan ist wie das Adressbuch eines einzelnen Benutzers, so dass jemand zum Dienstplan hinzugefügt oder aus dem Dienstplan entfernt wird.

Ihr XMPPClient kann nicht auf andere Benutzerdetails zugreifen, wenn der Benutzer nicht im Dienstplan hinzugefügt wird. Darüber hinaus ist der Dienstplan wie ein individuelles Adressbuch, so dass der Dienstplan im Allgemeinen einen anderen Benutzernamen für einen bestimmten Nutzer hat, statt dass sein Name auf dem Server registriert ist.

In Kürze müssen Sie über http/Rest Apis zugreifen. Sie können Rest API auf Ihrer OpenFire Admin-Konsole aktivieren und Sie können diesen Rest API-Client für Android-Seite verwenden. - https://github.com/xibsked/Openfire-Rest-Api-Client-Android

Es ist eine App bereits diese api verwenden, das wie eine Openfire Admin Console- https://play.google.com/store/apps/details?id=com.sked.ofadmin

Implementationen ist ganz einfach -

OfApiClient.with(this).account(account).getUser("admin", 
      new Listener<User>() { 
       @Override 
       public void onResponse(Object mTag, User user) { 
        //Handle Success 
       } 
      }, 
      new ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        //Handle Failure 
       } 
      });