Hey Leute,
wollte mal ne Android App schreiben mir der ich Daten zwischen meinem Computer und meinem Handy austauschen kann. Um zu vermeiden das ich Netzwerkaktionen auf dem UI-Thread ausführe habe ich jetzt also auf einen AsyncTask zurückgegriffen.
So funktioniert es nur leider nicht. Ich kann zwar Daten von meinem Computer zum Handy schicken, aber leider andersherum nicht. Problem ist das ich meinen Socket in 'doInBackground()' initialisiere und daher nicht auf ihn durch 'send' zugreifen kann. Sollte ich keinen AsyncTask verwenden oder mache ich einfach etwas falsch? Habe auch schon versucht meinem Socket in einem eigenen Thread via 'postExecute()' zu initialisieren aber dann bekomme ich folgenden Error:
Hoffe das mir wer Helfen kann. Danke schon mal und ein schönes Wochenende!
wollte mal ne Android App schreiben mir der ich Daten zwischen meinem Computer und meinem Handy austauschen kann. Um zu vermeiden das ich Netzwerkaktionen auf dem UI-Thread ausführe habe ich jetzt also auf einen AsyncTask zurückgegriffen.
Java:
package src.musicplayer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import android.os.AsyncTask;
import android.util.Log;
public class Connection extends AsyncTask<Void, String, Void> {
private Socket socket;
private BufferedReader in;
private PrintStream out;
private Controller controller;
Connection(Controller c) {
this.controller = c;
}
@Override
protected Void doInBackground(Void... params) {
try {
socket = new Socket("ip", 4444);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintStream(socket.getOutputStream());
while (socket.isConnected()) {
publishProgress(in.readLine());
}
} catch (IOException e) {
Log.d("Network Error", e.getLocalizedMessage());
}
return null;
}
@Override
protected void onProgressUpdate(String... cmds) {
for (String cmd : cmds) {
controller.handleInput(cmd);
}
}
public void send(final String cmd) {
if (socket.isConnected()) {
new Thread() {
@Override
public void run() {
out.println(cmd);
}
}.start();
}
}
}
So funktioniert es nur leider nicht. Ich kann zwar Daten von meinem Computer zum Handy schicken, aber leider andersherum nicht. Problem ist das ich meinen Socket in 'doInBackground()' initialisiere und daher nicht auf ihn durch 'send' zugreifen kann. Sollte ich keinen AsyncTask verwenden oder mache ich einfach etwas falsch? Habe auch schon versucht meinem Socket in einem eigenen Thread via 'postExecute()' zu initialisieren aber dann bekomme ich folgenden Error:
Java:
02-01 14:36:18.904: I/dalvikvm-heap(15925): Grow heap (frag case) to 12.611MB for 1127536-byte allocation
02-01 14:36:18.914: D/dalvikvm(15925): GC_FOR_ALLOC freed <1K, 14% free 11301K/13024K, paused 10ms, total 10ms
02-01 14:36:18.924: D/AbsListView(15925): Get MotionRecognitionManager
Hoffe das mir wer Helfen kann. Danke schon mal und ein schönes Wochenende!
Zuletzt bearbeitet: