Android更新UI的两种方法(二)

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界面更新后如下所示:


猜你喜欢

转载自blog.csdn.net/sconghw/article/details/79109436