2016-04-07 36 views
0

Yerel birimde bir openfire sunucum var ve kayıtlı kullanıcılara mesaj gönderip alabiliyorum. ancak tüm kullanıcıları sunucudan alamıyorum. Bir yönetim erişimine sahip olmayan kullanıcıyla giriş yaptım. Sunucu tarafında herhangi bir izin vermem gerekiyor mu?Smack android kullanarak bir openfire sunucusundan tüm kullanıcılara ulaşma

i tüm kullanıcıları almak için kullanıyorum kodudur ..

if (xmpp.getConnection()== null || !xmpp.getConnection().isConnected()) 
     return; 

    try { 
     UserSearchManager usm = new UserSearchManager(xmpp.getConnection()); 
     Form searchForm = usm.getSearchForm("search." + xmpp.getConnection().getServiceName()); 
     Form answerForm = searchForm.createAnswerForm(); 
     UserSearch userSearch = new UserSearch(); 
     answerForm.setAnswer("Username", true); 
     answerForm.setAnswer("search", userName); 
     ReportedData data = userSearch.sendSearchForm(xmpp.getConnection(), answerForm, "search." + xmpp.getConnection().getServiceName()); 

     for (ReportedData.Row row : data.getRows()) 
     { 
      arrayList.add(row.getValues("Username").toString()); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

ben ancak o da bana yardımcı değil, Kadrosu sınıfını kullanmak gösterir bazı çözümler çalıştı. Herhangi biri yanlış yaptığımı gösterir mi, yoksa yönetici olarak giriş yapmadığım için izin vermem gerekiyor mu? i alıyorum hata ..

org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPPError: remote-server-not-found 

Teşekkür :)

cevap

0

bu kodu deneyin olduğunu. Ben Smack bir istemci oluşturmak için kullanılır this answer

UserSearchManager usm= new UserSearchManager(xmpp.getConnection()); 
Form searchForm = usm.getSearchForm("search." +xmpp.getConnection().getServiceName()); 
Form answerForm = searchForm.createAnswerForm(); 
answerForm.setAnswer("Username", true); 
answerForm.setAnswer("search", userName); 
ReportedData data = usm 
    .getSearchResults(answerForm, "search." + xmpp.getConnection().getServiceName()); 

if (data.getRows() != null) { 
    for (ReportedData.Row row: data.getRows()) { 
     for (String jid:row.getValues("jid")) { 
     System.out.println(jid); 
     } 
    } 
} 
0

bu kod çimdik. Bir kullanıcı bir kullanıcı tarafından kullanılır. Bir kullanıcının, genellikle sunucunun tüm kullanıcılarına erişimi yoktur. Kullanıcıların, başka bir kullanıcı eklediğiniz yerde kişi listeleri veya liste listeleri bulunur.

+0

Bu yüzden, hangi kişilerimin sunucuda kayıtlı olduğunu nasıl bilebilirim? Bunu kullanmaya çalıştığım kodu gönderebilirim. ama bana – Newbiee

+0

bana yardım etmiyor, ne diyorsun bir iletişim numarası geçmeli ve sonra bu numarayı sunucuda aramalı mıyım? – Newbiee

+0

sunucuda kayıtlı tüm kullanıcıların listesini alamazsınız.Yalnızca –

2

Bu Aslında kullanıcı adı İşte

için joker (*) geçmek zorunda ben Openfire

tüm kullanıcıların alıyorum nasıl

Utils.getConnection() çalışma kodu var - xmpp bağlantım

public static void getAllXmppUsers() 
{ 
    try { 
    UserSearchManager manager = new UserSearchManager(Utils.getConnection()); 
    String searchFormString = "search." + Utils.getConnection().getServiceName(); 
    Log.d("***", "SearchForm: " + searchFormString); 
    Form searchForm = null; 

     searchForm = manager.getSearchForm(searchFormString); 

    Form answerForm = searchForm.createAnswerForm(); 

    UserSearch userSearch = new UserSearch(); 
    answerForm.setAnswer("Username", true); 
    answerForm.setAnswer("search", "*"); 

    ReportedData results = userSearch.sendSearchForm(Utils.getConnection(), answerForm, searchFormString); 
    if (results != null) { 
     List<ReportedData.Row> rows = results.getRows(); 
     for (ReportedData.Row row : rows) { 
      Log.d("***", "row: " + row.getValues("Username").toString()); 
     } 
    } else { 
     Log.d("***", "No result found"); 
    } 

    } catch (SmackException.NoResponseException e) { 
     e.printStackTrace(); 
    } catch (XMPPException.XMPPErrorException e) { 
     e.printStackTrace(); 
    } catch (SmackException.NotConnectedException e) { 
     e.printStackTrace(); 
    } 
} 
+0

kadrosunu kullanarak bağlantı yaparak belirli bir kullanıcı ekleyebilirsiniz Merhaba, Kullanıcı çevrimiçi mi yoksa çevrimdışı mı kontrol edilir? –