【发布时间】:2019-09-30 13:14:30
【问题描述】:
我尝试用“socket.io”写一个信使。 并写下这个。
//Socket.
private Socket socket;
{
try {
socket = IO.socket("http://192.168.1.3:8001");
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
//Tools.
Handler handlerServerMakeMeOnline;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.a_room_list);
handlerServerMakeMeOnline = new Handler();
socket.connect();
socket.on("serverMakeMeOnline", serverMakeMeOnlineListener);
}
private Emitter.Listener serverMakeMeOnlineListener = new Emitter.Listener() {
@Override
public void call(final Object... args) {
handlerServerMakeMeOnline.post(new Runnable() {
@Override
public void run() {
Toast.makeText(RoomListA.this, "Online", Toast.LENGTH_SHORT).show();
}
});
}
};
@Override
protected void onDestroy() {
socket.emit("makeMeOffline", userCode);
socket.disconnect();
socket.close();
super.onDestroy();
}
但是我有一个奇怪的问题。
当我第一次打开程序时,一切正常。
但是当我关闭应用程序并再次打开它时,serverMakeMeOnlineListener 内的Toast 被调用两次,如果我再次关闭并打开应用程序Toast 被调用三次等
【问题讨论】:
-
尝试在 onDestroy 期间添加这个:socket.off("makeMeOffline", handlerServerMakeMeOnline);在socket.disconnect()之后;
-
还在 onDestroy() 中添加 serverMakeMeOnlineListener =null
-
您是否尝试调试代码?我的意思是实际调试,如果需要检查内存地址等等......这是一个非常简单的问题。