如何在Android中将Java套接字对象添加到Parcelable
我想将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
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");