我正在尝试使用Android应用程序和Java应用程序使用TCP / IP发送对象。 但我遇到的问题是信息无效。
该对象属于一个名为Mensaje的类,并且在这两个项目中具有相同的包名称并具有相同的serialVersionUID:
package CLASSESS;
import java.io.Serializable;
public class Mensaje implements Serializable{
// private static final long serialVersionUID = 5950169519310163575L;
private static final long serialVersionUID = 9178463713495656548L;
public static int TYPE;
public static int ID;
public static String DATA;
}
Android应用程序类实现Serializable并将conexion处理为威胁
public class SocketClient implements Serializable{
private Runnable send_ObjectMessage = new Runnable(){
public void run(){
try {
obj_Mensaje = new Mensaje();
obj_Mensaje.TYPE = 1;
obj_Mensaje.ID = 2;
obj_Mensaje.DATA= "hOKA MUNDO";
salida_mensaje = new ObjectOutputStream(socket_cliente.getOutputStream());
salida_mensaje.writeObject(obj_Mensaje);
salida_mensaje.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
};
}
服务器具有相同的Mensaje类,并使用相同的serialVersionUID实现Serializable;
服务器读取威胁上的对象。
@Override
public void run() {
try {
obj_message_read = new Mensaje();
ois_readMessage = new ObjectInputStream(clientSocket.getInputStream());
while(clientSocket.isConnected()){
Object aux = ois_readMessage.readObject();
if(aux instanceof Mensaje){
obj_message_read = (Mensaje)aux;
setDATA(obj_message_read.DATA);
setTYPE(obj_message_read.TYPE);
setID(obj_message_read.ID);
System.out.println("Data" + obj_message_read.DATA);
}
}
}catch (IOException ioe){
ioe.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
问题是来自Mensaje的信息是空的。
所以当我打印System.out.println("Data" + obj_message_read.DATA);
时
服务器打印
数据空
答案 0 :(得分:1)
我认为问题在于您尝试发送的字段被声明为static
,这对于序列化是暂时的。
更改它删除该关键字:
public class Mensaje implements Serializable{
// private static final long serialVersionUID = 5950169519310163575L;
private static final long serialVersionUID = 9178463713495656548L;
public int TYPE;
public int ID;
public String DATA;
}