美文网首页
Android多线程编程

Android多线程编程

作者: Anwfly | 来源:发表于2020-09-17 10:29 被阅读0次

    Handler
    AsyncTask

    HTTPURLConnection使用

    1. get方式使用
    private void initData() {
        new Thread(() -> {
            try {
                //创建远程url连接对象
                URL url = new URL(smartUrl);
                //通过远程url对象打开一个连接,强制转换为HttpUrlConnection类型
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                //获取结果码
                int responseCode = con.getResponseCode();
                if (responseCode == HttpURLConnection.HTTP_OK) {
                    //通过连接对象获取一个输入流,向远程读取
                    InputStream inputStream = con.getInputStream();
                    //封装输入流is,并指定字符集
                    InputStreamReader ist = new InputStreamReader(inputStream);
                    char[] chars = new char[1024];
                    int len = 0;
                    StringBuffer sb = new StringBuffer();
                    while ((len = ist.read(chars)) != -1) {
                        sb.append(chars, 0, len);
                    }
                    String json = sb.toString();
                    Message message = Message.obtain();
                    message.what = 1;
                    message.obj = json;
                    handler.sendMessage(message);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }).start();
    }
    
    Handler handler = new Handler() {
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 1:
                    String json = (String) msg.obj;
                    SmartBean smartBean = new Gson().fromJson(json, SmartBean.class);
                    List<SmartBean.ResultsBean> results = smartBean.getResults();
                    ArrayList<SmartBean.ResultsBean> list = new ArrayList<>();
                    list.addAll(results);
                    SmartAdapter adapter = new SmartAdapter(MainActivity.this, list);
                    lv_smart.setAdapter(adapter);
                    break;
            }
        }
    };
    
    1. post方式使用
    private void login() {
        new Thread(() -> {
            try {
                //登录url
                String loginUrl = "https://www.wanandroid.com/user/login";
                // 创建远程url连接对象
                URL url = new URL(loginUrl);
                //通过远程url对象打开一个连接,强制转换为HttpUrlConnection类型
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                //设置连接方式:POST
                con.setRequestMethod("POST");
                //设置超时
                con.setConnectTimeout(10000);
                con.setReadTimeout(10000);
                //设置是否向httpUrlConnection输出,设置是否从httpUrlConnection读入,此外发送post请求必须设置这两个
                //setDoOutput默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true
                con.setDoOutput(true);
                //setDoInput默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无
                con.setDoInput(true);
                //设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式
                con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    
                //通过连接对象获取一个输出流
                OutputStream os = con.getOutputStream();
                //通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
                String param = "username=anfly&password=123456";
                os.write(param.getBytes());
    
                //获取结果码
                int responseCode = con.getResponseCode();
                if (responseCode == 200) {
                    //通过连接对象获取一个输入流,向远程读取
                    InputStream is = con.getInputStream();
                    //封装输入流is,并指定字符集
                    InputStreamReader isr = new InputStreamReader(is);
                    char[] chars = new char[1024];
                    StringBuffer sb = new StringBuffer();
                    int len = 0;
                    while ((len = isr.read(chars)) != -1) {
                        sb.append(chars, 0, len);
                    }
    
                    //sb转为string
                    String json = sb.toString();
                    Log.e("TAG", "json=" + json);
    
                    //关流
                    is.close();
                    isr.close();
                }
                //关流
                os.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }).start();
    }
    

    相关文章

      网友评论

          本文标题:Android多线程编程

          本文链接:https://www.haomeiwen.com/subject/lmyasktx.html