gpt4 book ai didi

android - 程序多次执行一行代码

转载 作者:行者123 更新时间:2023-11-29 18:27:16 26 4
gpt4 key购买 nike

我试着用“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 期间删除 Emitter.Listener这样,每次打开您的应用程序时,您都会添加一个新的 Emitter.Listener,从而导致多次显示 Toast

那么,试试这个:

@Override
protected void onDestroy() {
socket.disconnect();
socket.off("makeMeOffline", handlerServerMakeMeOnline);
socket.close();
super.onDestroy();
}

如果可行,请告诉我。如果不行,我将删除此答案

关于android - 程序多次执行一行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58168682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com