我正在尝试使用 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 应用程序类实现 Serialized 并处理威胁
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 实现可序列化;
服务器读取威胁上的对象。
@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);
服务器打印
Data Null
最佳答案
我认为问题在于您尝试发送的字段被声明为static
,这对于序列化来说是 transient 的。
更改它并删除该关键字:
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;
}
关于java - 如何使用Sockets TCP在java和android之间正确传递对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37215691/