0

我在将对象从我的 Android 应用程序发送到我的 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)我得到了一个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(...)Song表示 Song 数组)转换为 Song。

您可能应该使用以下内容更改您的ois.readObject();-line:

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