2016-07-21 7 views
0

チャットアプリを作成しようとしています。 - ローカルマシンにopenfireサーバーをインストールしました - openfireサーバーの管理パネルからいくつかのユーザーを追加しました - 今、私はすべての利用可能なユーザーをAndroidのエミュレータに表示しようとしています。 - 私はopenfireサーバーに接続してaSmackLibを使用することができます。しかし、connection.getRoster();でエラーが発生しました。Smackを使ってアンドロイドクライアントからオンラインで登録したユーザーをopenfireにする方法は?

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

このコードは、私にこのライン connection.getRoster()でエラーを与えます。 が見つかりませんでした。ここ

私私 依存関係

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

あなたが「アラ可能なユーザー」サーバーで必要な場合は、あなたはOpenfire JABBER SEARCH(search.jarプラグイン)にインストールする必要があります。しばしばそれはバンドルであり、次にリサーチを実装します。それは何か違うものです。 – MrPk

答えて

1

はスマックは、このような機能を持っていません。ただし、REST APIを使用してユーザーリストを取得できます。 これを行うには、プラグインリポジトリからサーバ側の残りのapiプラグインをインストールします。

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

のGradle:次に、クライアント側でrest api client

Mavenを追加

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

例:

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. 

**あなたは、サーバーのREST APIの中に残り、APIトークンを取得しますセクション。

0

名簿からすべての登録ユーザーを取得することはできません。原因は異なるです。名簿は個々のユーザのアドレス帳に似ていますので、名簿に誰かを追加したり、名簿から削除したりします。

ユーザが登録されていない場合、XMPPClientは別のユーザの詳細にアクセスできません。さらに、名簿は個人のアドレス帳のようなものであるため、一般的に名簿はサーバに登録されている名前の代わりに、特定のユーザのjidのために異なるニックネームを持つ。

短いと、http/rest apisでアクセスする必要があります。 あなたはopenfire管理コンソールで休憩APIを有効にすることができ、アンドロイド側にこの休憩APIクライアントを使用することができます。 - ありhttps://github.com/xibsked/Openfire-Rest-Api-Client-Android

すでにOpenfire管理コンソール] - https://play.google.com/store/apps/details?id=com.sked.ofadmin

実装のようなものです。このAPIを使用したアプリは非常に簡単です -

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 
       } 
      }); 
関連する問題