2012-12-03 2 views
0

Android 앱에서 Java 애플리케이션으로 Object를 보내는 데 문제가 있습니다. 정확히 동일한 직렬화 가능 클래스가 있습니다.Android 직렬화 - 자바 역 직렬화

I는 수신 측에이 코드를 사용하여 다른 하나에 하나의 자바 위해 appliction에서 개체를 보낼 때 그것은 완벽하게 작동합니다 :

@Override 
public void run() { 
    super.run(); 
    while(true){ 
     try{ 
      if(datagramSocket!=null)datagramSocket.close(); 
      datagramSocket = new DatagramSocket(PORT); 
      buffer = new byte[4096]; 
      inPacket = new DatagramPacket(buffer, buffer.length); 
      datagramSocket.receive(inPacket); 

      InetAddress clientAddress = inPacket.getAddress(); 
      int clientPort = inPacket.getPort(); 

      ByteArrayInputStream bais = new ByteArrayInputStream(buffer); 
      ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(bais)); 
      Song song = (Song) ois.readObject(); 
      song.setClientIP(inPacket.getAddress()); 
      dc.addSong(song); 
      datagramSocket.close(); 

     }catch (IOException e) { 
      System.out.println("IOException on receiving song: " + e); 
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

을하지만 난에 동일한 작업을 수행 할 때 그렇게하려는 곡을 전송 (안드로이드 안드로이드에서 내가 ClassCastException를 받고 있어요) 자바 객체 :

[Lcom.audiobuddy.serializables.Song; cannot be cast to com.audiobuddy.serializables.Song 

먼저 나는 패키지 이름이 달랐다 때문에 그것이라고 생각, 그래서 양쪽에 "com.audiobuddy.serializables"에 변경. 하지만 내 오류, 안드로이드 애플 리케이션을 보면, "[L"앞에 ";"추가 패키지를 변경 양쪽에 다시 ...

의 노래 - 클래스가 동일한 serialVersionUID의

답변

2

이 오류 메시지가 곡에 노래는 [] ([L(...)Song 곡의 배열을 의미) 캐스팅해야 할 것을 말한다. 나는 자바에 자바에서 보내하려고 할 때이 같은 문제를 얻을 ... 지금 일

Song[] songs = (Song[]) ois.readObject(); 
Song song = songs[0]; 
+0

감사합니다,하지만 :

당신은 아마 이런 식으로 뭔가로 ois.readObject(); - 라인을 변경해야합니다. 난 둘 다 자바와 안드로이드 자바 응용 프로그램을 보낼 수 있어야합니다 – dumazy

+1

@ dumazy 그냥 하나의 노래를 직렬화하거나 항상 노래 배열을 직렬화해야합니다. 이제 Java에서 하나의 노래를 직렬화하고있을 것입니다. 그러나 Android 코드에서 일련의 노래를 직렬화하고 있습니다. –

+0

내 자바 발신자가 하나의 객체 대신 배열을 보내고 완벽하게 작동합니다. 감사합니다! – dumazy