2015-03-28 10 views
9

Ho cambiato la mia app per usare Smack 4.2 che sostituisce Smack 4.1Come utilizzare Smack 4.2 per connettersi a ejabberd?

Ma sto ricevendo un errore nel config.setServiceName();

Il parametro per questo metodo è stato modificato da String a DomainBareJid. Non so come usare DomainBareJid e setServiceName in questo nuovo 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); 

E se io non impostare il nome del servizio, quindi ottengo il seguente errore:

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) 

Aiutateci, fornendo alcuni esempi di codice per impostare la serviceName.

+0

ho finalmente utilizzato la versione definitiva di Smack 4.1 e pubblicato l'attuazione completa qui: http://marothiatechs.blogspot.in/2015/08/building-your-own-android-chat_18.html –

risposta

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

Grazie ... 'setServiceName (DomainBareJid serviceName)' ora deprecato ... usa invece 'setXmppDomain (DomainBareJid xmppServiceDomain)'. A volte è difficile tenere il passo! –

+0

Grazie Ninogumy. Questo è stato molto utile! :) – Mike

2

Il nome del servizio dovrebbe essere il nome dell'host servito. esempio:

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

I non sono in grado di fornire una stringa come parametro in questo nuovo smack 4.2 –

+0

Oh! Il nome dei servizi dovrebbe essere una stringa. Si prega di utilizzare 4.1 stabile costruito invece di versioni alfa. –

+0

@ZMH haha ​​... Penso che scoprirai che questa è una scelta di design (progettata per rendere le nostre vite sempre più complicate), piuttosto che qualsiasi cosa abbia a che fare con alphas e beta! –

-1

questo è il mio codice per la connessione, ha funzionato perfettamente.

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

questi metodi non esistono in 4.2 – NehaK

+0

ora sto usando smack 4.2 e questo codice funziona senza alcun problema. – user2591041