AndroidアプリケーションとJavaアプリケーションを使用してTCP/IPを使用してオブジェクトを送信しようとしています。 しかし、来る情報がnullであるという問題があります。ソケットTCPを使ってJavaとAndroid間でオブジェクトを正しく渡す方法は?
オブジェクトが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に入ってくる情報がnullであることです。私はSystem.out.println("Data" + obj_message_read.DATA);
サーバーのプリント
データヌル
は、エンドポイント間でオブジェクトを「送信」するためのJava直列化を使用しないでください。プロトコル/データフォーマットは、プラットフォームに依存しないものが多くあり、それらを代わりに使用します。例えば、JSON。またはprotobuf。または...または...または... – fge