Android更新UI的两种方法(二)
本文介绍Android更新UI的另一种方法——消息机制(Handler)
初始化时界面:
使用消息机制的三个步骤:
①主线程创建Handler,重写handlerMessage
②子线程中将需要更新的信息存入obj中,给what赋值。
③子线程发送消息handler.sendMessage()
④主线程的handlerMessage来处理消息
具体实现过程如下所示:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button button;
private TextView textView;
private Handler myhandler1;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.bt_button);
textView = (TextView) findViewById(R.id.tv_message);
myhandler1 = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what==1){
String data=(String) msg.obj;
textView.setText(data);
}
}
};
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_button:
new workThread().start();
break;
default:
break;
}
}
private class workThread extends Thread{
final String serverPath="http://xxx.xxx.xxx.xxx:8080/ServletTest/MainMessage";
@Override
public void run() {
super.run();
try {
URL url=new URL(serverPath);
HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
httpURLConnection.setConnectTimeout(5000);
httpURLConnection.setRequestMethod("GET");
httpURLConnection.setRequestProperty("contentType","utf-8");
final int responseCode=httpURLConnection.getResponseCode();
if (responseCode==200){
InputStream inputStream=httpURLConnection.getInputStream();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream,"GB2312"));
final String responseMsg=bufferedReader.readLine();
Message message=new Message();
message.obj=responseMsg;
message.what=1;
myhandler1.sendMessage(message);
bufferedReader.close();
httpURLConnection.disconnect();
}else {
Toast.makeText(MainActivity.this,"responseCode="+responseCode,Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
点击按钮后,UI界面更新后如下所示: