1
Android 기기에서 Java 서버로 직렬화 된 데이터를 보내야합니다. 이유는 모르겠지만 의사 소통은 매우 불안정한 것으로 보입니다. 디버거에서 java.io.StreamCorruptedException :은 시작 직후에 발생합니다. 하나의 객체가지나 가지 않습니다. 디버거가 없으면 동일한 예외가 throw 될 때까지 약 10 개의 메시지가 전달됩니다. 누구나 아이디어가 있으니 도와주세요 :) 고마워요! 파비안Android-Java 통신을 통한 StreamCorruptedException
예외 :
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)
자바 코드 :
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
}
}
}
및 안드로이드 스레드 :
@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
}
}
음 ... 좋아요, "Nachricht"는 그다지 크지 않습니다. 2 개의 문자열과 수레 목록 만 포함합니다. 모든 정보가 포함 된 String을 만드는 것이 그리 큰 문제는 아닐 것입니다. 나는 왜 그것이 때때로 "때때로"또는 처음에는 효과가 없는지 알지 못합니다. Thread가 시작되기 전에 android는 이미 다른 Object의 ArrayList를 보내고 Thread가 시작될 때까지 올바르게 작동합니다. 나는 String으로 시도 할 것이다, 고마워. – fabi