2014-09-13 39 views
1

我正在使用asmack庫來開發一個whatsapp樣式的聊天應用程序。我能夠連接和創建accounts.I想實現「添加聊天」功能whatsapp,我們從登記的電話號碼列表中選擇朋友。爲此,我想在我的服務器上爲用戶輸入我手機中的號碼,然後將它們添加到我的名單中,只要我點擊它們即可。 我可以輕鬆地在我的ejabberd 2.11服務器上登錄和註冊用戶。 但我無法從中檢索已註冊用戶的列表。 我用於搜索該代碼:在ejabberd服務器上搜索註冊用戶總是返回空格式(asmack)

 UserSearchManager search = new UserSearchManager(conn); 
    try { 
    Form searchForm = search.getSearchForm("search."+conn.getServiceName()); 
    Form answerForm = searchForm.createAnswerForm(); 

     answerForm.setAnswer("Username",true); 
    answerForm.setAnswer("search",user); 

     System.out.println("search form"); 
    ReportedData data = search.getSearchResults(answerForm,"search."+conn.getServiceName()); 

這工作完全在我的Openfire server..but我ejabberd2 server..i不得不將它修改爲:

UserSearchManager search = new UserSearchManager(conn); 
try { 
Form searchForm = search.getSearchForm("vjud."+conn.getServiceName()); 
    Form answerForm = searchForm.createAnswerForm(); 

answerForm.setAnswer("user",username);//passed my jid in username i.e [email protected] 


System.out.println("search form"); 
ReportedData data = search.getSearchResults(answerForm,"vjud."+conn.getServiceName()); 

if(!data.getRows().isEmpty()) 
{ 
List<Row> hue = data.getRows();Iterator<Row> it=hue.iterator(); 
while(it.hasNext()) 
{ 
Row row = it.next(); 
List<String> hue2 = row.getValues("jid");Iterator<String> iterator=hue2.iterator(); 
if(iterator.hasNext()) 
{ 
String value = iterator.next().toString(); 
System.out.println(value); 
} 

} 

} 
else{ 
System.out.println("its null"); 
} 

上面的代碼總是返回一個空的表單。所以我應該傳遞什麼參數answerForm.setAnswer();爲ejabberd? 請參閱「answerForm.setAnswer(」用戶名「,true); answerForm.setAnswer(」search「,user);」 工作openfire .. 但ejabberd沒有一個布爾類型用戶名字段..我應該通過什麼?

+0

請格式化你的問題,現在它是可怕的閱讀。 – Flow 2014-09-13 10:42:00

+0

@Flow抱歉即時通訊新..如果你能幫忙嗎?我應該如何搜索用戶在ejabberd服務器? – 2014-09-13 11:21:25

+0

你的第一個代碼給出了這個錯誤...告訴我如何解決它「沒有響應從服務器上的狀態設置」.... !!! – 2014-10-16 08:55:28

回答

0

此問題的解決方案不是使用任何usersearch,而是實現與包含用戶標識的數據庫的直接連接。以下是它的完成方式:

  1. 對於openfire,可以選擇連接到mysql數據庫。安裝mysql並連接你的數據庫。
  2. 當用戶創建一個帳戶時,它將在您鏈接的數據庫中列出。
  3. 現在實際的搜索部分將使用PHP,因爲android無法直接連接到mysql數據庫。
  4. 在服務器pc上安裝wamp服務器。製作一個php腳本,用於查詢你的數據庫,獲取它從客戶端獲取的userid值(從你的客戶端,你可以創建一個包含所有手機號碼的php文章,並將其與服務器數據庫中的數字進行比較,然後發回現有的數字發給客戶的名單。

我希望這能解決你的問題。

+0

中提出了一個更好的方法,我會試試這個,儘快回到你的身邊...... !!! – 2014-11-03 09:27:21