Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在活动之间传递套接字、ObjectInputStream、ObjectOutputStream_Android - Fatal编程技术网

Android 在活动之间传递套接字、ObjectInputStream、ObjectOutputStream

Android 在活动之间传递套接字、ObjectInputStream、ObjectOutputStream,android,Android,我的客户机/服务器项目中有两项活动: 1-登录(打开连接) 2-用手处理比赛 我已经厌倦了用Intenet和startActivity传递Socket、ObjectInputStream、ObjectOutputStream对象,但它只能传递可序列化的对象。 如何传递这些对象? 我读到我可以将应用程序标签用于此用途,但我不明白如何使用。 你们能帮我找到解决办法吗 谢谢 是的,您不能序列化文件对象(包括套接字),因为这样做没有任何意义 但是,为什么还要将连接传递到第二个活动?为什么不做以下几点:

我的客户机/服务器项目中有两项活动:
1-登录(打开连接)
2-用手处理比赛

我已经厌倦了用Intenet和startActivity传递Socket、ObjectInputStream、ObjectOutputStream对象,但它只能传递可序列化的对象。
如何传递这些对象?
我读到我可以将应用程序标签用于此用途,但我不明白如何使用。
你们能帮我找到解决办法吗

谢谢

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

但是,为什么还要将连接传递到第二个活动?为什么不做以下几点:

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

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


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

    如果不想启动服务,可以创建全局变量

    为该套接字创建一个单例模式,如下所示:

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