2012-06-13 33 views
0

我試圖在我的服務器計算機和我的android智能手機之間創建一個通信系統。最後,我獲得了良好的工作成果。但是,我有一個Android視圖的問題。具體來說,我試圖從一個沒有擴展的類中使用textview的方法「.setText()」。我將textview對象傳遞給該類,但是「textview.setText()」方法沒有任何失敗並且對UI沒有任何影響。讓我來看看代碼,我想你會更清楚地理解,並有機會嘗試代碼。通過另一個類編輯textview

public class NetworkingActivity extends Activity { 

    public static String message; 
    public static EditText editext; 
    public static TextView textview; 
    private Connector connector; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 


    public void buttonClicked(View v){ 
     editext = (EditText) findViewById(R.id.editText1); 
     textview = (TextView) findViewById(R.id.textview); 
     message = editext.getText().toString(); 

     connector = new Connector(NetworkingActivity.this); 
     connector.start(); 

    } 

    public void yenile(String respond){ 
     textview.setText(respond); 
     editext.setText(""); 

    } 

    public void yenileClicked(View v){ 
     textview.setText(Connector.respond); 
     editext.setText(""); 

    } 

    public static class Connector extends Thread{ 
     private static final int PORT = 3588; 
     private static final String IpAddress = "XXX.XXX.XXX.XXX"; // of course X's have a int value 
     public static String respond; 
     private NetworkingActivity activity; 

     public Connector(NetworkingActivity activity){ 
      this.activity = activity; 
     } 

     public void run() { 

      try { 

       Socket socket = new Socket(IpAddress, PORT); 

       PrintWriter writer = new PrintWriter(socket.getOutputStream(), true); 
       Scanner scanner = new Scanner(socket.getInputStream()); 

       writer.println(NetworkingActivity.message); 
       respond = scanner.nextLine(); 


       activity.yenile(respond); 

       socket.close(); 
      } catch (Exception e) { 

      } 

     } 

    } 
} 

最後,我應該再告訴你一件事。 yenileClicked()方法通過xml文件中的代碼進行分配,該文件是通過按鈕「android:onClick =」yenileClicked「」。問題是其他班級的殘疾能夠繼續使用幾乎相同的方法yenile();

+2

問題是您無法從單獨的線程編輯視圖。使用http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable) 所以它看起來像'activity.runOnUIThread(new Runnable {public void run(){activity .yenile(respond);}});' 使您的當前代碼正常工作。我會考慮創建一個接口回調,而不是傳遞整個活動...... –

回答