美文网首页
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消息机制(六) 总结

    参考Android线程的正确使用姿势Android性能优化典范之多线程篇 Android多线程编程的总结Andro...

  • 关于并发编程的博客收藏

    Android并发编程 开篇http://ddrv.cn/a/23502/ Android并发编程 多线程与锁ht...

  • 育人书籍大全

    android 0-3年 android编程、设计模式、重构、多线程编程 3-5年 一线架构师编程实践、ap...

  • android开发 之 Bolts-Android

    目录 多线程编程对比:-iOS与Android Bolts-AndroidTasksChaining-TasksT...

  • Android多线程基础

    线程的基本用法 Android多线程编程并不比Java多线程编程特殊,基本都是使用相同的语法。那么如何创建一个线程...

  • 《java多线程编程核心技术》读书笔记

    最近读完了《java多线程编程核心技术》(高洪岩)、《Android高性能编程》(叶坤 译)、《Java REST...

  • POSIX线程 (一)

    POSIX POSIX是一种标准,例如有多线程编程标准、网络编程标准等。Android NDK的线程是通过POSI...

  • 多线程编程

    多线程编程之Linux环境下的多线程(一)多线程编程之Linux环境下的多线程(二)多线程编程之Linux环境下的...

  • Android多线程编程

    1.在子线程中更新UI Android中更新UI元素,必须在主线程中进行,否则就会出现异常。 运行以上程序,你会发...

  • Android 多线程编程

    一、线程的基本用法 1. 方法一、新建一个类继承自 Thread,然后重写父类的 run() 方法。 启动: 2....

网友评论

      本文标题:Android多线程编程

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