2011-03-11 23 views
2

之间我有2个活动在我的客户端/服务器项目:
1 - 登录(开业连接)
2 - HANDELING游戏。通插座,ObjectInputStream的,ObjectOutputStream的Activites

我厌倦了使用Intenet和startActivity传递Socket,ObjectInputStream,ObjectOutputStream对象,但它只能传递可序列化的对象。
我该如何传递这个对象?
我读过,我可以使用应用程序标签进行此项使用,但我不明白。
你们可以带我去解决方案
谢谢。

回答

1

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

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

0

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

但是,为什么您需要将连接传递给第二个活动呢?为什么不做以下操作:

  1. 在第一个活动中登录,获取有关用户需要的一些数据。
  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); 
    } 
相关问题