2015-03-28 8 views
9

Zmieniono moją aplikację, aby użyć Smack 4.2 zamiast Smack 4.1Jak używać Smack 4.2 do łączenia się z ejabberd?

Ale otrzymuję błąd w config.setServiceName();

Parametr tej metody został zmieniony z String na DomainBareJid. Nie wiem, jak używać DomainBareJid i setServiceName w tym nowym Smack.

XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration 
       .builder(); 
     config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled); 


     config.setServiceName("What should i put here?"); 


     config.setHost(serverAddress); 
     config.setPort(5222); 
     config.setDebuggerEnabled(true); 
     connection = new XMPPTCPConnection(config.build()); 

     connection.setUseStreamManagement(true); 

I jeśli nie ustawić nazwę usługi, a następnie pojawia się następujący błąd:

03-28 13:44:29.834: E/AndroidRuntime(7104): FATAL EXCEPTION: main 
03-28 13:44:29.834: E/AndroidRuntime(7104): java.lang.RuntimeException: Unable to create service com.marothiatechs.cpm.MyService: java.lang.IllegalArgumentException: Must provide XMPP service name 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at android.app.ActivityThread.handleCreateService(ActivityThread.java:2715) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at android.app.ActivityThread.access$1600(ActivityThread.java:153) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1351) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at android.os.Looper.loop(Looper.java:137) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at android.app.ActivityThread.main(ActivityThread.java:5289) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at java.lang.reflect.Method.invoke(Method.java:525) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at dalvik.system.NativeStart.main(Native Method) 
03-28 13:44:29.834: E/AndroidRuntime(7104): Caused by: java.lang.IllegalArgumentException: Must provide XMPP service name 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at org.jivesoftware.smack.ConnectionConfiguration.<init>(ConnectionConfiguration.java:106) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration.<init>(XMPPTCPConnectionConfiguration.java:52) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration.<init>(XMPPTCPConnectionConfiguration.java:36) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration$Builder.build(XMPPTCPConnectionConfiguration.java:126) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at com.marothiatechs.cpm.MyXMPP.initialiseConnection(MyXMPP.java:134) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at com.marothiatechs.cpm.MyXMPP.init(MyXMPP.java:119) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at com.marothiatechs.cpm.MyXMPP.<init>(MyXMPP.java:84) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at com.marothiatechs.cpm.MyXMPP.getInstance(MyXMPP.java:93) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at com.marothiatechs.cpm.MyService.onCreate(MyService.java:74) 
03-28 13:44:29.834: E/AndroidRuntime(7104):  at android.app.ActivityThread.handleCreateService(ActivityThread.java:2705) 

Proszę pomóc dostarczając przykładowy kod, aby ustawić ServiceName.

+0

I wreszcie użył wersji programu Smack 4.1 i opublikował pełną realizację tutaj: http://marothiatechs.blogspot.in/2015/08/building-your-own-android-chat_18.html –

Odpowiedz

17
DomainBareJid serviceName = JidCreate.domainBareFrom("example.org"); 
config.setServiceName(serviceName); 
+3

Dzięki ... 'setServiceName (DomainBareJid serviceName)' teraz przestarzałe ... zamiast tego użyj 'setXmppDomain (DomainBareJid xmppServiceDomain)'. Czasami trudno nadążyć! –

+0

Dzięki Ninogumy. To było bardzo pomocne! :) – Mike

2

Nazwa usługi powinna być obsługiwana przez hosta. np

config.setServiceName("gtalk.com"); 
+0

I nie jestem w stanie podać ciągu jako parametru w tym nowym smacku ​​4.2 –

+0

Oh! Nazwa usługi powinna być łańcuchem. Użyj wersji stabilnej 4.1 zamiast wersji alfa. –

+0

@ZHH haha ​​... Myślę, że przekonasz się, że jest to wybór projektowy (zaprojektowany tak, aby uczynić nasze życie bardziej skomplikowanym), niż cokolwiek wspólnego z alfami i betami! –

-1

to jest mój kod do łączenia, to działało idealnie.

DomainBareJid domainBareJid = JidCreate.domainBareFrom(mServiceName) ; 
    XMPPTCPConnectionConfiguration.Builder builder= 
      XMPPTCPConnectionConfiguration.builder(); 
    builder.setServiceName(domainBareJid); 
    builder.setHostAddress(InetAddress.getByName(mServiceName)); 
    builder.setUsernameAndPassword(mUsername, mPassword); 
    builder.setResource("resource"); 
    builder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled); 

    mConnection = new XMPPTCPConnection(builder.build()); 
    mConnection.addConnectionListener(this); 
    mConnection.connect(); 
    mConnection.login(); 
+0

te metody nie istnieją w 4.2 – NehaK

+0

teraz używam smack 4.2 i to działa bez żadnych problemów. – user2591041

Powiązane problemy