2014-07-02 65 views
0

我有一個活動,有三個片段在它上面,並且有一個類負責我的活動中的tcp連接。 TCP類作爲異步。裏面onCreate主要活動的方法我正在啓動tcp連接。然後,當我點擊一個按鈕,我開始一個新的活動,並獲得當前的tcp連接在新的活動使用單身類。我可以使用可用的tcp將新活動的消息發送到服務器。然而,這是一個asyc任務,所以我不能根據從服務器收到的消息對新活動進行更改。 如何從異步任務更改新活動的佈局?從後臺線程中調用活動

//Activity code: 

public class MainScreen extends FragmentActivity implements ActionBar.TabListener { 
TCPClient mTcpClient; 
connectTask cnnTask; 
///The class is responsible for tcp connection 
public class connectTask extends AsyncTask<String, String, TCPClient> { 

    @Override 
    public TCPClient doInBackground(String... message) { 

     //we create a TCPClient object 
     mTcpClient = new TCPClient(new TCPClient.OnMessageReceived() { 
      @Override 
      //here the messageReceived method is implemented 
      public void messageReceived(String message) { 
       //do process 
      } 
    } 
    protected void onCreate(Bundle savedInstanceState) { 
     SharedPreferences preferences = null; 
     super.onCreate(savedInstanceState); 
     try { 
      cnnTask = new connectTask(); 
      preferences = this.getSharedPreferences("MyPreferences", 
        Context.MODE_PRIVATE); 
      mTcpClient.SERVERIP = preferences.getString("IPAddress", "0"); 
      mTcpClient.SERVERPORT = Integer.parseInt(preferences.getString("Port", "13759")); 
      cnnTask.execute(""); 
     } catch (Exception e) { 
    } 
     //.. 
     SingletonTCP .getInstance().setmTCPClient(mTcpClient); 

} 
//Fragment code: 
public class FragmentDesign extends Fragment implements View.OnClickListener { 
    public void onClick(View v) { 
     String name = v.getTag().toString(); 
     Intent intent = new Intent(getActivity(),NewActivity.class); 
     intent.putExtra("Name", this._name); 
     startActivity(intent); 
    } 
} 
//Singleton class to set and get the current TCPClient. 
public class SingletonTCP { 
    private TCPClient mTCPClient; 
    public TCPClient getmTCPClient() { return mTCPClient; } 
    public void setmTCPClient(TCPClient mTCPClient) {this.mTCPClient = mTCPClient;} 

    private static final SingletonTCP holder = new SingletonTCP(); 
    public static SingletonTCP getInstance() {return holder;} 
} 
enter code here 
//New activity code. 
public class NewActivity extends Activity implements View.OnClickListener { 
    public class TCP extends AsyncTask<String, String, TCPClient> { 
    @Override 
    protected TCPClient doInBackground(String... params) { 
     mTCPClient = new TCPClient(new TCPClient.OnMessageReceived() { 
      @Override 
      public void messageReceived(String message) { 
       mes = message; 
      } 
     }); 
     return null; 
    } 
} 
    @Override 
    public void onClick(View v) { 
    String command = "<message>"; 
    this.mTCPClient.sendMessage(command); 
    } 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    mTCPClient = SingletonTCP .getInstance().getmTCPClient(); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_new_activity); 
    Bundle extras = getIntent().getExtras(); 
    departmanAdi = extras.getString("Name"); 
    Button button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(this); 
    tcp = new TCP(); 
    tcp.execute(""); 
    } 
} 

回答

0

你可以稱之爲publishProgress()從內部doInBackground(),它會調用onProgressUpdate()在UI線程上。在onProgessUpdate()中,您可以訪問並更改您的活動。

這在文檔here中描述。

+0

謝謝。我會嘗試。 – Blast

+0

當然,沒問題。通常onProgressUpdate()用於更新進度條,但它可用於其他需要在UI線程上運行的基於進度或後臺線程狀態的事情。 – JDJ