使用Android Java通信的StreamCorruptedException

使用Android Java通信的StreamCorruptedException,android,exception,serialization,Android,Exception,Serialization,我需要将序列化数据从Android设备发送到Java服务器。 我不知道为什么,但沟通似乎很不稳定。在调试器中,java.io.StreamCorruptedException:在启动后立即抛出。没有一个物体经过。 如果没有调试器,将传递近10条消息,直到抛出相同的异常。 谁有主意,请帮帮我:) 非常感谢。 费边 例外情况: java.io.StreamCorruptedException: invalid type code: 2F at java.io.ObjectInputStrea

我需要将序列化数据从Android设备发送到Java服务器。 我不知道为什么,但沟通似乎很不稳定。在调试器中,java.io.StreamCorruptedException:在启动后立即抛出。没有一个物体经过。 如果没有调试器,将传递近10条消息,直到抛出相同的异常。 谁有主意,请帮帮我:) 非常感谢。 费边

例外情况:

java.io.StreamCorruptedException: invalid type code: 2F
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at androidAnbindung.AndroidVerwalter.run(AndroidVerwalter.java:114)
java代码:

public void Nachrichtenaustausch(){
    port ++;
    try {
        serverSocket = new java.net.ServerSocket(port);
        System.out.println("Warte auf 2. Verbindungsaufbau...");
        client = serverSocket.accept();
        System.out.println("Verbindung 2 ist eingegangen...");
        in = new ObjectInputStream(new ObjectInputStream(client.getInputStream()));
        Nachricht n;
        // starte den regulären Verkehr mit dem Androidgerät
        new Thread(this).start();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

@Override
    public void run() {
        Nachricht speicher;
        while (true) {
            try {

                speicher = (Nachricht) in.readObject();
                if (speicher != null) {
                    System.out.println(speicher.getName()+"..............................."+speicher.getWerte().get(0));
                }synchronized (objekliste) {
                    for (AndroidObject ao : this.objekliste) {
                        if (speicher.getName().equals(ao.name)) {
                            ao.abstrakter_Wert = speicher.getAktuellerWert();
                            if (speicher.getWerte()!=null) {
                                ao.werte = speicher.getWerte();

                            }
                        }
                    }
                }
                Thread.sleep(50);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }catch (Exception e) {
                // TODO: handle exception
            }

        }
    }
android线程:

@Override
public void run() {
    // TODO Auto-generated method stub  
    try {
        while (true) {
            if (!nachrichtenliste.isEmpty()) {
                Nachricht speicher = nachrichtenliste.get(0);
                try {
                    out.writeObject(speicher);
                    out.flush();
                    synchronized (nachrichtenliste) {
                        nachrichtenliste.remove(speicher);
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            Thread.sleep(50);
            handler.post(this);
        }


    } catch (Exception e) {
        // TODO: handle exception
    }       
}

我可以想象Android和Java在这里并不完全兼容序列化。因此,一方发送另一方不期望的代码


我宁愿在这里使用更多的文本协议(json、xml),而不是序列化。

我可以想象Android和Java在这里并不完全兼容序列化。因此,一方发送另一方不期望的代码

我宁愿使用更多的文本协议(json、xml),而不是序列化。

hmm……好的,“Nachricht”没有那么大,只包含2个字符串和一个浮点数组列表。创建一个包含所有信息的字符串不会太麻烦。我只是不明白为什么它“有时”或者一开始就有效。在线程启动之前,android已经发送了另一个对象的ArrayList,并且它工作正常,直到线程启动。我将尝试使用字符串,谢谢。嗯……好的,“Nachricht”没有那么大,只包含两个字符串和一个浮动数组列表。创建一个包含所有信息的字符串不会太麻烦。我只是不明白为什么它“有时”或者一开始就有效。在线程启动之前,android已经发送了另一个对象的ArrayList,并且它工作正常,直到线程启动。我试试绳子,谢谢。