2012-07-21 23 views
1

我想建立我的手機和PC之間的客戶端服務器連接,如何在主線外改變視圖?

package com.example.tcptest; 

import java.io.BufferedWriter; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.InetAddress; 
import java.net.Socket; 
import java.util.Arrays; 
import java.util.Timer; 
import java.util.TimerTask; 

import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.support.v4.app.NavUtils; 

public class MainActivity extends Activity { 

    TCPClient tcpclient; 
    Boolean isconnected = false; 
    Button connectBtn; 
    Button sendBtn; 
    TextView ipport; 
    TextView sendtext; 
    TextView rcvtext; 
    Timer timer; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //Buttons 
     connectBtn=(Button)findViewById(R.id.connectbtn); 
     sendBtn=(Button)findViewById(R.id.sendbtn); 

     ipport = (TextView)findViewById(R.id.serverip); 
     sendtext = (TextView)findViewById(R.id.sendtxt); 
     rcvtext = (TextView)findViewById(R.id.console);  

     connectBtn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       //String[] i_po = ((String)ipport.getText()).split(":"); 
       //tcpclint = new TCPClient(i_po[0], Integer.parseInt(i_po[1]));   

       Thread cThread = new Thread(new ClientThread()); 
       cThread.start();     
      } 

     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
    public class ClientThread implements Runnable {  
     public void run() { 
      tcpclient = new TCPClient("192.168.0.101", 5000); 
      tcpclient.connect(); 
      tcpclient.send("hello server"); 
      rcvtext.setText(tcpclient.getdata());   
     } 
    } 

} 

在這種情況下,因爲它是在線程中運行的,我不能改變rcvtext的文本,有沒有可能改變內容爲rcvtext,如果連接成功,我想寫日誌到rcvtext

回答

4

在您ClientThreadrun()方法,實現這個:

MainActivity.this.runOnUiThread(new Runnable() { 
    public void run() { 
     rcvtext.setText(tcpclient.getdata()); 
    } 
}); 

這告訴給Android的UI線程(主應用程序線程)上運行它時,就可以了,而不是當前線程。

+0

+1 upvote,現在很高興,但我還沒有複製你的答案,因爲我已經多次回答了這個問題 – 2012-07-21 18:28:56

+0

@Tim並不總是有公示; [here](http://stackoverflow.com/questions/11594584/displaying-parameters-of-method-in-a-textview-or-toast/11594604#11594604)我編輯了我的帖子,但沒有顯示。此外,10分鐘前9分鐘前。 – Eric 2012-07-21 18:31:30

+1

@imrankhan如果你沒有複製我的答案,我爲此道歉。我只是想保持一個誠實的社區,在我看來,我是對的。如果我不是,我很抱歉。 – Eric 2012-07-21 18:32:09