我的客户端/服务器项目中有2个活动:
1 - 登录(打开连接)
2 - Handeling比赛。
我厌倦了使用Intenet和startActivity传递Socket,ObjectInputStream,ObjectOutputStream对象,但它只能传递可序列化的对象。
我怎么能通过这个对象?
我读到我可以使用应用程序标签进行此用途,但我不明白如何
你们能引导我解决问题吗?
谢谢。
答案 0 :(得分:1)
您可以做的另一件事是在静态可访问的类中存储对流/套接字对象的引用,然后从其他活动中选择它们。
关于android中静态访问的强制警告:确保静态存储的任何内容都有 no 直接或间接引用View或Activity对象,因为这可能导致内存泄漏。
答案 1 :(得分:0)
是的,你不能序列化文件对象(包括套接字),因为它没有任何意义。
但是为什么你还需要将连接传递给第二个活动呢?为什么不这样做:
答案 2 :(得分:0)
如果您不想启动服务,可以创建一个全局变量。
为该套接字创建一个Singleton模式,如下所示:
public class SocketSingleton {
private static Socket socket;
public static void setSocket(Socket socketpass){
SocketSingleton.socket=socketpass;
}
public static Socket getSocket(){
return SocketSingleton.socket;
//return socket;
}
}
然后在代码中只更改全局值:
public void changeScreen(Socket socket, String ip, int port) {
SocketSingleton.setSocket(socket);
Intent i = new Intent(getActivity().getApplicationContext(), ControlActivity.class);
i.putExtra("ip", ip);
i.putExtra("port",port);
startActivity(i);
}