在活动之间传递Socket,ObjectInputStream,ObjectOutputStream

时间:2011-03-11 20:20:02

标签: android

我的客户端/服务器项目中有2个活动:
1 - 登录(打开连接)
2 - Handeling比赛。

我厌倦了使用Intenet和startActivity传递Socket,ObjectInputStream,ObjectOutputStream对象,但它只能传递可序列化的对象。
我怎么能通过这个对象?
我读到我可以使用应用程序标签进行此用途,但我不明白如何 你们能引导我解决问题吗? 谢谢。

3 个答案:

答案 0 :(得分:1)

您可以做的另一件事是在静态可访问的类中存储对流/套接字对象的引用,然后从其他活动中选择它们。

关于android中静态访问的强制警告:确保静态存储的任何内容都有 no 直接或间接引用View或Activity对象,因为这可能导致内存泄漏。

答案 1 :(得分:0)

是的,你不能序列化文件对象(包括套接字),因为它没有任何意义。

但是为什么你还需要将连接传递给第二个活动呢?为什么不这样做:

  1. 登录第一个活动,获取有关用户的一些数据。
  2. 将获取的数据传递给第二个活动。如果您需要与服务器通信,只需在第二个活动中打开一个新连接。

答案 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);
    }