我使用以下代码连接到套接字服务器:
XMPPConnection connection;
@Override
protected void onCreate(Bundle savedInstanceState) {
Thread t=new Thread(new Runnable() {
@Override
public void run() {
ConnectionConfiguration connConfig=new ConnectionConfiguration("178.62.84.123", 5222,"localhost");
connection=new XMPPTCPConnection(connConfig);
try{
connection.connect();
}catch(XMPPException ex) {
setConnection(null);
} catch (SmackException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
t.start();
}
private void onPause() {
try {
connection.disconnect();
} catch (NotConnectedException e) {
e.printStackTrace();
}
}
我在线程中设置connection
变量。但是当我尝试断开我的应用程序崩溃时。
logcat的:
02-02 14:16:15.080: E/XMPPConnection(8047): Error in listener while closing connection
02-02 14:16:15.080: E/XMPPConnection(8047): android.os.NetworkOnMainThreadException
02-02 14:16:15.080: E/XMPPConnection(8047): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133)
02-02 14:16:15.080: E/XMPPConnection(8047): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
02-02 14:16:15.080: E/XMPPConnection(8047): at java.net.InetAddress.getLocalHost(InetAddress.java:365)
02-02 14:16:15.080: E/XMPPConnection(8047): at org.jivesoftware.smackx.bytestreams.socks5.Socks5Proxy.<init>(Socks5Proxy.java:108)
02-02 14:16:15.080: E/XMPPConnection(8047): at org.jivesoftware.smackx.bytestreams.socks5.Socks5Proxy.getSocks5Proxy(Socks5Proxy.java:163)
为什么尝试与ui线程断开连接?我在另一个帖子中设置connection
。
Ps:我跟着这个:http://developer.samsung.com/technical-doc/view.do?v=T000000119
答案 0 :(得分:1)
在此示例中,在线程内调用断开连接,因此它不会阻止等待网络消息的UI。但是,在此示例中,我不重新连接,您应该将其实现为正确的状态(可能是OnResume)。
XMPPConnection connection = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
Thread t=new Thread(new Runnable() {
@Override
public void run() {
ConnectionConfiguration connConfig=new ConnectionConfiguration("178.62.84.123", 5222,"localhost");
connection=new XMPPTCPConnection(connConfig);
try{
connection.connect();
}catch(XMPPException ex) {
setConnection(null);
} catch (SmackException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
});
t.start();
}
private void onPause() {
Thread t=new Thread(new Runnable() {
@Override
public void run() {
try {
if (connection != null)
connection.disconnect();
} catch (NotConnectedException e) {
}
}
});
t.start();
}