2017-10-02 2 views
1

채팅을 위해 smack-android : 4.1.0을 사용하고 있습니다. 저는 openfire를 사용하고 있습니다. 내가 AccountManager와 안드로이드에 계정을 만들려고 할 때 지드 - 기형 나는 모든 것을 시도했지만 솔루션을 찾을 수 없다, 나는 사용자를 생성하기 위해 내 코드를 부르고있다.Android - XMPPError : jid-malformed - 수정

if(connection != null && connection.isConnected()){ 
        Log.e("=AccountManager= ","AccountManager"); 

        // Registering the user 
        AccountManager accountManager = AccountManager.getInstance(connection); 
        //Log.e("=supportsAccountCreation= ","="+accountManager.supportsAccountCreation()); 
        //Log.e("=getAccountInstructions= ","="+accountManager.getAccountInstructions()); 
        Map<String, String> attributes = new HashMap<>(); 
        attributes.put("email", "[email protected]"); 
              attributes.put("username", "spota421"); 

        if (accountManager!=null&&accountManager.supportsAccountCreation()) { 
         accountManager.sensitiveOperationOverInsecureConnection(true); 
         accountManager.createAccount("spota421", "xxxxx", attributes); 
        } 


       } 

이하 내 콘솔에 응답이 있습니다. 누군가가 나를 안내하고, 내가 뭘 잘못하고 있는지 알려주세요.

D/SMACK: SENT (0): <iq to='52.62.104.135:9090' id='4Clc6-3' type='get'><query xmlns='jabber:iq:register'></query></iq> 
10-02 07:40:21.670 7216-7330/ 
D/SMACK: RECV (0): <iq type="error" id="4Clc6-3" to="ip-172-31-28-121.ap-southeast-2.compute.internal/8xk12y6kvq" from="52.62.104.135:9090"><query xmlns="jabber:iq:register"/><error code="400" type="modify"><jid-malformed xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq> 


org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPPError: jid-malformed - modify 
10-02 07:40:21.675 7216-7216/com.signity.spota W/System.err:  at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:232) 
10-02 07:40:21.675 7216-7216/com.signity.spota W/System.err:  at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:213) 
10-02 07:40:21.675 7216-7216/com.signity.spota W/System.err:  at org.jivesoftware.smackx.iqregister.AccountManager.getRegistrationInfo(AccountManager.java:332) 
10-02 07:40:21.675 7216-7216/com.signity.spota W/System.err:  at org.jivesoftware.smackx.iqregister.AccountManager.supportsAccountCreation(AccountManager.java:144) 
10-02 07:40:21.675 7216-7216/com.signity.spota W/System.err:  at com.signity.spota.xmpp.CreateConnection.Authenticate(CreateConnection.java:182) 
10-02 07:40:21.675 7216-7216/com.signity.spota W/System.err:  at com.signity.spota.xmpp.CreateConnection.access$200(CreateConnection.java:34) 
10-02 07:40:21.675 7216-7216/com.signity.spota W/System.err:  at com.signity.spota.xmpp.CreateConnection$connect.onPostExecute(CreateConnection.java:121) 
10-02 07:40:21.675 7216-7216/com.signity.spota W/System.err:  at com.signity.spota.xmpp.CreateConnection$connect.onPostExecute(CreateConnection.java:55) 
10-02 07:40:21.675 7216-7216/com.signity.spota W/System.err:  at android.os.AsyncTask.finish(AsyncTask.java:636) 
+0

이 XMPP Restful API를 사용하여 사용자를 만들 수 있습니다. 의사 선생님, 당신이 해결되기를 바랍니다. https://www.igniterealtime.org/projects/openfire/plugins/restapi/readme.html#create-a-user –

+0

괜찮 았지만 위의 오류가 발생하는 이유를 알고 계십니까? – Achin

+1

예,이 작업 솔루션은 나를 위해 – Achin

답변

0

이 작업을 시도해보십시오.

 if (XMPPConnection != null && XMPPConnection.isConnected()) { 
       Log.e("=AccountManager= ", "AccountManager"); 

       AccountManager accountManager = AccountManager.getInstance(XMPPConnection); 

       Map<String, String> attributes = new HashMap<>(); 

       try { 
        if (accountManager != null && accountManager.supportsAccountCreation()) { 
         accountManager.sensitiveOperationOverInsecureConnection(true); 
         Jid jid = JidCreate.entityBareFrom("spot123" + "@" + "yourOpenFireService As String"); 
         accountManager.createAccount(jid.getLocalpartOrNull(), "Spot1234sdfsd", attributes); 
        } 
       } catch (SmackException.NoResponseException e) { 
        e.printStackTrace(); 
       } catch (XMPPException.XMPPErrorException e) { 
        e.printStackTrace(); 
       } catch (SmackException.NotConnectedException e) { 
        e.printStackTrace(); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } catch (XmppStringprepException e) { 
        e.printStackTrace(); 
       } 


      } 
+0

당신은 어떤 atrribute 넣어 줄 필요가 없습니다. –

+0

제가 ompile을 사용하고이 코드 – Achin

+0

시도 'org.igniterealtime.smack을 : 헤로인 - 안드로이드 : 4.1.6'하자 컴파일 'org.igniterealtime.smack : 헤로인-TCP를 : 4.1.6' 컴파일 'org.igniterealtime .smack : smack-android-extensions : 4.1.6 ' – Achin

0

조금 늦었지만 JID를 이스케이프 처리하거나 JID 메타 문자 세트를 제거/교체해야합니다.