今天做Smack + Openfir xmpp聊天程序,多用户时,切换用户登陆时老是报异常SmackException$AlreadyConnectedException: Client is already connected;
01-05 23:41:42.045 11079-11404/com.example.fanyuan.myim W/System.err: org.jivesoftware.smack.SmackException$AlreadyConnectedException: Client is already connected
01-05 23:41:42.049 11079-11404/com.example.fanyuan.myim W/System.err: at org.jivesoftware.smack.tcp.XMPPTCPConnection.throwAlreadyConnectedExceptionIfAppropriate(XMPPTCPConnection.java:342)
01-05 23:41:42.049 11079-11404/com.example.fanyuan.myim W/System.err: at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.java:351)
01-05 23:41:42.049 11079-11404/com.example.fanyuan.myim W/System.err: at com.example.fanyuan.myim.XmppManager$1.run(XmppManager.java:56)
01-05 23:41:42.049 11079-11404/com.example.fanyuan.myim W/System.err: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390)
01-05 23:41:42.049 11079-11404/com.example.fanyuan.myim W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-05 23:41:42.049 11079-11404/com.example.fanyuan.myim W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-05 23:41:42.049 11079-11404/com.example.fanyuan.myim W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-05 23:41:42.049 11079-11404/com.example.fanyuan.myim W/System.err: at java.lang.Thread.run(Thread.java:856)
明明调用了XMPPTCPConnection的disconnect()方法
折腾了一天,后来无心之下发现了解决点;
因为XMPPTCPConnection类我做成了类似单例的全局唯一实例,发现了点就好说了,就是每当切换帐户登陆时都要新建一个XMPPTCPConnection实例