Hi,
ich bin gerade dabei nen kleinen Chat mit Android zu programmieren und hab dabei Probleme mit dem Client.
Nachdem ich herausgefunden habe, dass man die Sockets und das ganze Netzwerkgedöns nicht in den Mainthread packen darf, habe ich ne zweite Klasse angelegt die Runnable implementiert und diese mit dem ganzen Netzwerkzeug drin in nem neuen Thread gestartet. Problem ist jetzt nur, dass ich von der Main Klasse jetzt nicht mehr auf den Netzwerk-Klassen-Thread zugreifen kann.
Sprich, wenn auf den Button gedrückt wird, soll der Text aus einem EditText verschickt werden. Geht leider nicht so einfach, da der GUI Kram im Mainthread ist, und der Netzwerk Kram im Netzwerk-Klassen-Thread. Ebenso bei der Ausgabe von empfangenen Nachrichten vom Server in nem TextView.
Daher meine Frage, wie kann ich es machen, dass die beiden Threads gegenseitig aufeinander zugreifen können.
Mainclass:
Connectionclass:
So weit mein Code, funktioniert aber nicht. Ich hoffe mir kann hier jemand helfen.
ich bin gerade dabei nen kleinen Chat mit Android zu programmieren und hab dabei Probleme mit dem Client.
Nachdem ich herausgefunden habe, dass man die Sockets und das ganze Netzwerkgedöns nicht in den Mainthread packen darf, habe ich ne zweite Klasse angelegt die Runnable implementiert und diese mit dem ganzen Netzwerkzeug drin in nem neuen Thread gestartet. Problem ist jetzt nur, dass ich von der Main Klasse jetzt nicht mehr auf den Netzwerk-Klassen-Thread zugreifen kann.
Sprich, wenn auf den Button gedrückt wird, soll der Text aus einem EditText verschickt werden. Geht leider nicht so einfach, da der GUI Kram im Mainthread ist, und der Netzwerk Kram im Netzwerk-Klassen-Thread. Ebenso bei der Ausgabe von empfangenen Nachrichten vom Server in nem TextView.
Daher meine Frage, wie kann ich es machen, dass die beiden Threads gegenseitig aufeinander zugreifen können.
Mainclass:
Code:
protected void onCreate() {
Button b = (Button)findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Thread connThread =new Thread(new Connection());
connThread.start();
Connection con = new Connection();
con.send("<|cldt|name|"+n+"|>");
});
}
public void newMsg(String msg){
Toast.makeText(getBaseContext(), "Message: "+msg, Toast.LENGTH_SHORT).show();
System.out.println("Message: "+msg);
}
Connectionclass:
Code:
public class Connection implements Runnable{
Socket client;
BufferedReader reader;
PrintWriter writer;
public Connection (){
}
@Override
public void run() {
try {
String server =InetAddress.getByName("MyServer").getHostAddress().toString();
client = new Socket(server, 8000);
System.out.println("Connected");
InputStreamReader streamReader = new InputStreamReader(client.getInputStream());
reader = new BufferedReader(streamReader);
writer = new PrintWriter(client.getOutputStream());
Thread readerThread = new Thread(new recive());
readerThread.start();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void send(String msg){
System.out.println("Send");
try {
writer.println(msg);
writer.flush();
System.out.println("Message Send");
} catch (Exception e){
e.printStackTrace();
}
}
public class recive implements Runnable {
@Override
public void run() {
System.out.println("Reading");
String msg;
MainActivity main = new MainActivity();
try {
while ((msg=reader.readLine()) != null) {
main.newMsg(msg);
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
So weit mein Code, funktioniert aber nicht. Ich hoffe mir kann hier jemand helfen.