使用Android Java通信的StreamCorruptedException
我需要将序列化数据从Android设备发送到Java服务器。 我不知道为什么,但沟通似乎很不稳定。在调试器中,java.io.StreamCorruptedException:在启动后立即抛出。没有一个物体经过。 如果没有调试器,将传递近10条消息,直到抛出相同的异常。 谁有主意,请帮帮我:) 非常感谢。 费边 例外情况:使用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
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,并且它工作正常,直到线程启动。我试试绳子,谢谢。