AndroidアプリからJavaアプリケーションにオブジェクトを送信する際に問題が発生しました。まったく同じシリアル化可能なクラスがあります。
受信側でこのコードを使用して、あるJavaアプリケーションから別のJavaアプリケーションにオブジェクトを送信すると、完全に機能します。
@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();
}
}
しかし、Androidで同じことを行おうとすると(AndroidからJavaにSong-objectを送信すると)、ClassCastExceptionが発生します。
[Lcom.audiobuddy.serializables.Song; cannot be cast to com.audiobuddy.serializables.Song
最初はパッケージ名が違うからだと思ったので、両側を「com.audiobuddy.serializables」に変更しました。しかし、私のエラーであるAndroidアプリを見ると、パッケージが変更され、前に「[L」と「;」が追加されています。後ろに...
両側で、Songクラスは同じserialVersionUIDを持っています