2015-03-28 9 views
9

Ich habe meine App geändert, um Smack 4.2 zu ersetzen Smack 4.1Wie verwende ich Smack 4.2 zum Verbinden mit ejabberd?

Aber ich bekomme einen Fehler in der config.setServiceName();

Der Parameter für diese Methode wurde von String in DomainBareJid geändert. Ich weiß nicht, wie DomainBareJid und setServiceName in diesem neuen Smack verwenden.

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

Und wenn ich den Service-Name nicht gesetzt ist, dann bekomme ich folgende Fehlermeldung:

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) 

Bitte helfen Sie, indem Sie einige Beispielcode Bereitstellung der service einzustellen.

+0

ich verwendet habe endlich eine freigegebene Version von Smack 4.1 und veröffentlicht die vollständige Umsetzung hier: http://marothiatechs.blogspot.in/2015/08/building-your-own-android-chat_18.html –

Antwort

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

Danke ... 'setServiceName (DomainBareJid serviceName)' jetzt veraltet ... verwende 'setXmppDomain (DomainBareJid xmppServiceDomain)' stattdessen. Es ist manchmal schwierig mitzuhalten! –

+0

Danke Ninogumy. Das war sehr hilfreich! :) – Mike

2

Dienstname sollte die von Ihnen gelieferte Hostname sein. zB:

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

I Ich bin nicht in der Lage, String als Parameter in diesem neuen Smack 4.2 –

+0

Oh! Der Name der Services sollte string sein. Bitte verwenden Sie 4.1 stable anstelle von Alpha-Versionen. –

+0

@ZMH haha ​​... Ich denke, du wirst feststellen, dass dies eine Design-Entscheidung ist (entworfen, um unser ganzes Leben immer komplizierter zu machen), anstatt irgendetwas mit Alphas und Betas zu tun zu haben! –

-1

dies zu verbinden ist mein Code, es funktionierte perfekt.

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

diese Methoden existieren nicht in 4.2 – NehaK

+0

jetzt Im Smack 4.2 und dieser Code funktioniert ohne jedes Problem. – user2591041

Verwandte Themen