2014-09-13 2 views
1

asmack 라이브러리를 사용하여 whatsapp 스타일 채팅 응용 프로그램을 개발하고 있습니다. 연결하고 계정을 만들 수 있습니다. "채팅 추가"기능을 구현하고 싶습니다. whatsapp, 등록 된 전화 번호 목록에서 친구를 선택합니다.이 경우, 내 전화에서 가지고 있었던 번호에 대해 내 서버에서 usersearch를 수행하고 싶었습니다. 그런 다음 클릭하면 내 명단에 추가합니다. ejabberd 2.11 서버에 쉽게 로그인하여 사용자를 등록 할 수 있습니다. 그러나 이미 등록 된 사용자 목록을 검색 할 수 없습니다. 내가 검색이 코드를 사용 :ejabberd에 등록 된 사용자를 검색 서버는 null 폼을 항상 반환합니다. (asmack)

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

위의 코드는 항상 반환

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

이 내 ejabberd2의 server..i 내의 Openfire의 server..but에 완벽하게 작동하는 것은 그것을 수정했다 null 폼입니다. 그래서 어떤 인자가 answerForm.setAnswer()에서 전달되어야합니다; ejabberd를 위해? "answerForm.setAnswer ("사용자 이름 ", true); answerForm.setAnswer ("search ", user);" openfire에서 근무했습니다. 하지만 ejabberd에는 부울 유형 Username 필드가 있습니다. 그래서 통과해야합니까?

+0

질문을 포맷하십시오, 지금은 읽을 끔찍. – Flow

+0

@Flow 죄송 메신저 새로운 당신은 도움이 될 수 ..if? 어떻게 ejabberd 서버에서 사용자를 검색해야합니까? –

+0

첫 번째 코드는이 오류를 제공합니다 ... 해결 방법을 알려주십시오 "상태 세트의 서버에서 응답 없음".... –

답변

0

이 문제의 해결 방법은 usersearch를 사용하지 않고 사용자 ID가 포함 된 데이터베이스에 직접 연결을 구현하는 것입니다. 방법은 다음과 같습니다.

  1. openfire의 경우 mysql 데이터베이스에 연결할 수있는 옵션이 있습니다. mysql을 설치하고 db를 연결하십시오.
  2. 사용자가 계정을 만들면 링크 된 데이터베이스에 계정이 나열됩니다.
  3. 이제 안드로이드가 mysql db에 직접 연결할 수 없기 때문에 실제 검색 부분에서 PHP를 사용하게됩니다.
  4. 서버 pc에 wamp server를 설치하십시오. 귀하의 클라이언트에서 당신이 모든 휴대 전화 번호의 PHP 게시물을 만들 수 있습니다, 그것을 서버 db에있는 번호와 비교 후 다시 (귀하의 클라이언트에서 얻을 사용자 ID 값에 대한 DB를 쿼리 PHP 스크립트를 확인하십시오 클라이언트에 기존 번호 목록.

내가 희망이 당신의 문제를 해결한다.

+0

답변에서 더 나은 접근 방식이 제안됩니다. 나는 이것을 시험해보고 빨리 되돌아갑니다 ... !!! –