0

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を持っています

4

1 に答える 1

2

エラー メッセージは、Song[] ( [L(...)SongSong の配列を意味する) を Song にキャストしようとしたことを示しています。

ois.readObject();-line を次のように 変更する必要があります。

Song[] songs = (Song[]) ois.readObject();
Song song = songs[0];
于 2012-12-03T20:55:27.447 に答える