G
Goldfish
Neues Mitglied
- 0
Hi, ich bin ziemlich neu bei android und versuche gerade eine Anwendung zu schreiben, die sich mit einem kleinen Java-Server verbindet.
Soweit klappt alles gut, die Verbindung wird hergestellt vom Android Client aus und der Server akzeptiert das ganze und weiß, dass sich da was anmeldet.
Problem jetzt ist, dass wenn ich via ObjectOutputStream ein Objekt an den Server schicke, der Server die Nachricht nicht erhält... der liest einfach nichts ein, als würde der Postbote unterwegs das Paket verlieren und entsprechend gar nicht mehr an der Haustür klingeln... hat jemand ne Ahnung, woran das liegen kann?
Hier kurze entsprechende Codeausschnitte dazu
Auf dem Server sieht die Annahme folgendermaßen aus. Und ja die Funktion wird aufgerufen. Meine testausgaben bestätigen definitiv, dass der Thread gestartet wird.
Wäre super, wenn jemand weiß, wieso ich dieses Problem habe. Wenn ichs über einen herkömmlichen Java-Client mache, der nicht auf einem Androidsystem basiert funktioniert alles wunderbar.
Danke für jede Hilfe.
Soweit klappt alles gut, die Verbindung wird hergestellt vom Android Client aus und der Server akzeptiert das ganze und weiß, dass sich da was anmeldet.
Problem jetzt ist, dass wenn ich via ObjectOutputStream ein Objekt an den Server schicke, der Server die Nachricht nicht erhält... der liest einfach nichts ein, als würde der Postbote unterwegs das Paket verlieren und entsprechend gar nicht mehr an der Haustür klingeln... hat jemand ne Ahnung, woran das liegen kann?
Hier kurze entsprechende Codeausschnitte dazu
Code:
// Dieser Code wird ausgeführt und klappt wunderbar soweit
private OnTouchListener getConnectionListener(){
OnTouchListener clickListener = new OnTouchListener(){
public boolean onTouch(View arg0, MotionEvent arg1) {
try {
sock = new Socket("10.0.2.2",55555);
output = new ObjectOutputStream(sock.getOutputStream());
input = new ObjectInputStream(sock.getInputStream());
....
startServerInputListener();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
};
return clickListener;
}
// nach Lognachricht, kommt er hier auch bis zum Warten auf den input
private void startServerInputListener(){
new Thread(new Runnable() {
public void run() {
while(true){
try {
Log.d("MyApp","Vor der Nachricht");
Request message = (Request) input.readObject();
Log.d("MyApp","Nach der Nachricht");
handleRequest(message);
} catch (ClassNotFoundException e ) {
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}
}
}
}).start();
}
// hier die letzen beiden kleinen Teile
// der OnClickListener der gleich kommt, wird laut Log immer aufgerufen, wenn ich den entsprechenden Button drücke und entsprechend müsste die Nachricht ja auch versendet werden, da ich hier keine Exception geworfen bekomme.
private void handleRequest(Request r){
switch(r.type){
case LOGIN:
String message = (String) r.getObject(RequestKey.LOGIN);
answer.setText(message);
break;
}
}
private OnTouchListener getSendListener(){
OnTouchListener clickListener = new OnTouchListener(){
public boolean onTouch(View v, MotionEvent event) {
String password = text.getText().toString();
Request r = new Request(RequestType.LOGIN);
r.addObject(RequestKey.LOGIN, password);
try {
Log.d("MyApp","Senden der Request: "+password);
output.writeObject(r);
} catch (IOException e) {
Log.d("MyApp","Request nicht gesendet: "+password);
e.printStackTrace();
}
return false;
}
};
return clickListener;
}
Auf dem Server sieht die Annahme folgendermaßen aus. Und ja die Funktion wird aufgerufen. Meine testausgaben bestätigen definitiv, dass der Thread gestartet wird.
Code:
public void listenForMessage(){
Thread t = new Thread(){
@Override
public void run(){
while(true){
Request message;
Object obj = null;
try {
obj = input.readObject();
message = (Request) obj;
} catch (ClassNotFoundException | IOException e) {
JOptionPane.showMessageDialog(ServerExample.f, "Request Cast Fehler: "+obj.getClass());
e.printStackTrace();
return;
}
JOptionPane.showMessageDialog(ServerExample.f, "klappt doch");
handleMessage(message);
}
}
};
t.start();
}
Wäre super, wenn jemand weiß, wieso ich dieses Problem habe. Wenn ichs über einen herkömmlichen Java-Client mache, der nicht auf einem Androidsystem basiert funktioniert alles wunderbar.
Danke für jede Hilfe.