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("");
}
}
谢谢。我会尝试。 – Blast
当然,没问题。通常onProgressUpdate()用于更新进度条,但它可用于其他需要在UI线程上运行的基于进度或后台线程状态的事情。 – JDJ