2016-05-13 2 views
0

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); サーバーのプリント

データヌル

+0

は、エンドポイント間でオブジェクトを「送信」するためのJava直列化を使用しないでください。プロトコル/データフォーマットは、プラットフォームに依存しないものが多くあり、それらを代わりに使用します。例えば、JSON。またはprotobuf。または...または...または... – fge

答えて

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; 
} 
+0

ありがとうございました。私は3年前と同じプロジェクトを使用していて、うまくいきましたので奇妙です。 – mavi

+0

「シリアライゼーションのために一時的なもの」はどういう意味ですか? – mavi

+0

これは無視されることを意味します。 – SanF

関連する問題