Hallo,
heute ist irgendwie nicht mein Tag.
Ich habe jetzt ein weiteses Problem.
Ich habe eine TCP Verbindung mit welcher, wie bereits in einem anderen Thema erwähnt, wechselnde Daten übertragen werden.
der übertragende String sieht wie folgt aus (zahl ; zahl)
Es kommt auch alles soweit an nun möchte ich den String teilen und die beiden Zahlen in Integerwerte umwandeln welche dann x und y koordinaten von einem Button sein sollen.
Ich empfange die Daten in einem Thread und gebe sie an einen Handler weiter.
Was vom Server kommt:
client = server.accept();
output = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
final int[] array_x = { 100, 200, 300, 400, 500};
final int[] array_y = { 100, 200, 300, 400, 500};
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask()
{
private int next = 0;
@Override
public void run()
{
n = (array_x[next % array_x.length]);
m = (array_y[next % array_y.length]);
next++;
try
{
String x = String.valueOf(n);
String y = String.valueOf(m);
String trennzeichen =" ; ";
output.write(x);
output.write(trennzeichen);
output.write(y);
System.out.println(x+trennzeichen+y);
output.newLine();
output.flush();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, 0, 2000);
Alles anzeigen
wie es bein Client ankommt und ich an den Handler weitergebe.
while (running==true)
{
try
{
String s = input.readLine();
Message msg = myHandler.obtainMessage();
msg.obj = s;
myHandler.sendMessage(msg);
}
catch (IOException e)
{
e.printStackTrace();
Message msg = myHandler.obtainMessage();
msg.obj = "Serververbindung unterbrochen";
myHandler.sendMessage(msg);
stop();
}
}
Alles anzeigen
im Handler versuche ich folgendes zu machen:
final Handler myHandler = new Handler()
{
public void handleMessage(Message msg)
{
String k = (String)msg.obj;
String[] neu = k.split(" ; ");
String x = neu[0];
String y = neu[1];
int x1 = Integer.parseInt(x);
int y1 = Integer.parseInt(y);
fahne.setX(x1);
fahne.setY(y1);
serverdaten.setText(k);
}
};
Alles anzeigen
Die Logcat sagt dazu folgendes:
09-16 18:42:34.090: D/dalvikvm(2200): Late-enabling CheckJNI
09-16 18:42:34.210: W/System.err(2200): java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 4444): connect failed: ECONNREFUSED (Connection refused)
09-16 18:42:34.210: W/System.err(2200): at libcore.io.IoBridge.connect(IoBridge.java:114)
09-16 18:42:34.210: W/System.err(2200): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
09-16 18:42:34.210: W/System.err(2200): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
09-16 18:42:34.210: W/System.err(2200): at java.net.Socket.startupSocket(Socket.java:566)
09-16 18:42:34.210: W/System.err(2200): at java.net.Socket.tryAllAddresses(Socket.java:127)
09-16 18:42:34.210: W/System.err(2200): at java.net.Socket.<init>(Socket.java:177)
09-16 18:42:34.210: W/System.err(2200): at java.net.Socket.<init>(Socket.java:149)
09-16 18:42:34.210: W/System.err(2200): at com.example.client.Verbindung.run(Client.java:141)
09-16 18:42:34.210: W/System.err(2200): at java.lang.Thread.run(Thread.java:856)
09-16 18:42:34.210: W/System.err(2200): Caused by: libcore.io.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
09-16 18:42:34.210: W/System.err(2200): at libcore.io.Posix.connect(Native Method)
09-16 18:42:34.210: W/System.err(2200): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
09-16 18:42:34.210: W/System.err(2200): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
09-16 18:42:34.210: W/System.err(2200): at libcore.io.IoBridge.connect(IoBridge.java:112)
09-16 18:42:34.210: W/System.err(2200): ... 8 more
09-16 18:42:34.240: D/AndroidRuntime(2200): Shutting down VM
09-16 18:42:34.240: W/dalvikvm(2200): threadid=1: thread exiting with uncaught exception (group=0x40a411f8 )
09-16 18:42:34.250: E/AndroidRuntime(2200): FATAL EXCEPTION: main
09-16 18:42:34.250: E/AndroidRuntime(2200): java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
09-16 18:42:34.250: E/AndroidRuntime(2200): at com.example.client.Client$1.handleMessage(Client.java:37)
09-16 18:42:34.250: E/AndroidRuntime(2200): at android.os.Handler.dispatchMessage(Handler.java:99)
09-16 18:42:34.250: E/AndroidRuntime(2200): at android.os.Looper.loop(Looper.java:137)
09-16 18:42:34.250: E/AndroidRuntime(2200): at android.app.ActivityThread.main(ActivityThread.java:4424)
09-16 18:42:34.250: E/AndroidRuntime(2200): at java.lang.reflect.Method.invokeNative(Native Method)
09-16 18:42:34.250: E/AndroidRuntime(2200): at java.lang.reflect.Method.invoke(Method.java:511)
09-16 18:42:34.250: E/AndroidRuntime(2200): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-16 18:42:34.250: E/AndroidRuntime(2200): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-16 18:42:34.250: E/AndroidRuntime(2200): at dalvik.system.NativeStart.main(Native Method)
09-16 18:42:34.350: D/dalvikvm(2200): GC_CONCURRENT freed 240K, 6% free 6746K/7111K, paused 3ms+4ms
Kann man vieleicht den String aus dem Handler an eine seperate Methode übergeben und dort die Teilung, Umwandlung und setzen des Buttons realisieren?
wenn ja wie?
Kann mir irgend einer weiterhelfen?
Bei Bedarf kann ich auch den kompletten Code posten aber vielleicht sieht ja einer auf den ersten Blick wo das Problem liegt.
Gruß
Brausebernd