HttpUrlConnection的使用



1.GET和POST方式有什么 区别

这两种方式都是HTTP常用的请求方式
get方式属于明文传参,在地址栏可以看到参数,调用简单,不安全
post方式属于暗文传参,在地址栏参数不可见,调用稍复杂,更加安全
所以,一般是公开的东西就可以使用get方法,而当要一定加密的时候就要使用get方法

2.HttpUrlConnection请求网络数据实例

基本步骤如下:
1.创建URL对象
2.通过URL对象调用openConnection()方法获得HttpURLConnection对象
3.HttpURLConnection对象调用getInputStream()方法向服务器发送HTTP请求并获取到服务器返回的输入流
5.读取输入流,转换成String字符串

注意:在Android中访问网络必须添加网络权限,在Android中访问网络必须放在子线程进行

下面为代码演示:

private void getWebInfo() {
        try {
            //创建URL地址对象
            URL url=new URL("https://www.lenovo.com.cn");
            //创建Connection对象
            HttpURLConnection connection= (HttpURLConnection) url.openConnection();
            //创建输入流对象
            InputStream inputStream=connection.getInputStream();
            //创建Reader对象
            InputStreamReader reader=new InputStreamReader(inputStream);
            //创建BufferReader对象
            BufferedReader bufferedReader=new BufferedReader(reader);
            //开始读取
            String temp="";
            StringBuffer stringBuffer=new StringBuffer();
            while ((temp=bufferedReader.readLine())!=null){
                stringBuffer.append(temp);
            }
            Log.e("TAG",stringBuffer.toString());

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

最后我是用到了打印的方式在控制台将所得到的网址的内容打印出来,这即为HttpUrlConnection请求网络数据实例
当然,我们要注意这个方法一定要放到一个子线程中运行,因为主线程不能进行耗时操作;

3.HttpUrlConnection加载网络图片实例

HttpUrlConnection加载网络图片实例与上面的请网络数据稍有不同,其输入的地址为你的图片网络地址,而不是你的网站地址

URL url = new URL("https://csdnimg.cn/feed/20180608/ddb65a7342289cf76a19e41d845a446e.png");

我们能发现前几步与上面的网络请求一样

            URL url = new URL("https://csdnimg.cn/feed/20180608/ddb65a7342289cf76a19e41d845a446e.png");
            //创建Connection对象
            HttpURLConnection connection= (HttpURLConnection) url.openConnection();
            //创建输入流对象
            InputStream inputStream=connection.getInputStream();

            Bitmap bitmap= BitmapFactory.decodeStream(inputStream);

但是这里我们要注意的是,加载网络图片是会更新UI的,所以要放在主线程,但是主线程中又不能进行耗时操作,所以在这里我们需要创建一个Handler对象来进行主线程和子线程之间消息的传输:

private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Bitmap bmp= (Bitmap) msg.obj;
            imageView.setImageBitmap(bmp);
        }
    };
            Message message=handler.obtainMessage();
            message.obj=bitmap;
            handler.sendMessage(message);

最后将方法放在一个子线程中即可实现HttpUrlConnection加载网络图片

http_btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        getWebPic();
                    }
                }).start();            }
        });

4.String/StringBuffer/StringBuilder有什么区别

StringBuffer和StringBuilder都继承自AbstractStringBuilder这个类,而AbstractStringBuilder和String都继承自Object这个类(Object是所有java类的超类)。所以这三个类之间的关系可以大致表示为:
这里写图片描述
且String类没有append()、delete()、insert()这三个成员方法,而StringBuffer和StringBuilder都有这些方法