Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.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中将Java套接字对象添加到Parcelable_Java_Android - Fatal编程技术网

如何在Android中将Java套接字对象添加到Parcelable

如何在Android中将Java套接字对象添加到Parcelable,java,android,Java,Android,我想将Java套接字对象从一个活动传递到另一个活动。我曾想过使用Parcelable进行传递,但无法将对象添加到包裹中 public class NetworkInformation implements Parcelable { private String ipAddress; private String portNo; private Socket networkSocket; protected NetworkInformation(Parcel i

我想将Java套接字对象从一个活动传递到另一个活动。我曾想过使用Parcelable进行传递,但无法将对象添加到包裹中

public class NetworkInformation implements Parcelable {

    private String ipAddress;
    private String portNo;
    private Socket networkSocket;

    protected NetworkInformation(Parcel in) {
    }

    public static final Creator<NetworkInformation> CREATOR = new Creator<NetworkInformation>() {
        @Override
        public NetworkInformation createFromParcel(Parcel in) {
            return new NetworkInformation(in);
        }

        @Override
        public NetworkInformation[] newArray(int size) {
            return new NetworkInformation[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(ipAddress);
        dest.writeString(portNo);
        //How to add the Socket to parcelable here ?
    }  
}
公共类NetworkInformation实现可包裹{
私有字符串IP地址;
私有字符串端口号;
专用套接字网络套接字;
受保护的网络信息(包裹输入){
}
公共静态最终创建者=新创建者(){
@凌驾
公用网络信息createFromParcel(中的地块){
返回新的网络信息(在中);
}
@凌驾
公用网络信息[]新数组(整数大小){
返回新的网络信息[大小];
}
};
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
目的写入地址(IP地址);
目的地记录(端口号);
//如何在此处将插座添加到parcelable?
}  
}

我不确定这是否有效,但您可以尝试:

private String ipAddress;
private String portNo;
private Socket networkSocket;

protected NetworkInformation(Parcel in) {
      ipAddress = in.readString();
      portNo = in.readString();
      networkSocket = new Socket(makeRealIP(ipAddress),makeRealPortNo(portNo));
}
当然,您必须编写自己的makeRealIP和makeRealPortNo来将字符串转换回新套接字()的有用参数


我还没有尝试过这个,我敢打赌其他回答的人都非常正确地警告不要在套接字层搞砸了。这可能会变得有点棘手。祝你好运。

IMHO,一个活动首先不应该有套接字,更不用说在活动之间传递它了。网络I/O应该在某个稳定对象(例如,存储库单例)中处理,而不是在活动中处理。我正在使用套接字连接到我的应用程序作为控制器的游戏。但我会试着做一个单身汉。你不能像传真机一样打包一个插座。
Bundle myBundle = new Bundle();
NetworkInformation myNetworkInfo;
myBundle.putParceable("myNetworkInfo",myNetworkInfo);
myNetworkInfo = (NetworkInformation)myBundle.getParceable("myNetworkInfo");