3
我目前正在使用Android的tcp客戶端。 我想將我的android設備連接到我電腦上的tcp服務器,並每2秒接收一次數據。問題在於,由於我在tcp客戶端中實現了while循環,因此我的應用程序正在關閉應用程序。 我試過用不同的方式寫循環,使得tcp客戶端檢查服務器套接字,但沒有成功。怎樣才能使循環,檢查服務器套接字沒有得到強制關閉?Android的TCP客戶端
這裏是我的代碼,我目前使用:
public class Connection implements Runnable {
@Override
public void run() {
try {
sk=new Socket(server,port);
viewsurface.setText("connected");
flag = true;
} catch (UnknownHostException e) {
viewsurface.setText("failed 1 socket");
flag = false;
} catch (IOException e) {
viewsurface.setText("failed 2 socket");
flag = false;
}
while (flag == true){
try {
checkin = sk.getInputStream();
checkint = checkin.available();
if (checkint > 0){
try {
BufferedReader in = new BufferedReader(new InputStreamReader(sk.getInputStream()));
received = in.readLine();
viewsurface.setText(received);
} catch (IOException e) {
viewsurface.setText("failed to receive");
}
}
Thread.sleep(2000);
} catch (IOException e) {
viewsurface.setText("checkin failed");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
是的,你是對的。導致力量關閉的問題的確是viewText.setText。如果我註釋掉那條線,我就不會再有任何力量了。我也在循環之前移動了checkin和bufferreader。 – cdrag 2011-05-02 11:23:16
所以,現在的問題是,每當我收到一些東西並更新它/在主UI線程中顯示它時,我將如何傳遞「received」變量的值?對不起這個問題,但我是新來的android/java。 – cdrag 2011-05-02 11:51:35
使用AsyncTask添加了一些示例代碼。這應該做你想做的。 – 2011-05-02 13:01:55