使用OKHttpClient访问网络

目录

0. 使用OKHttpClient前要引入依赖:

1. GET(同步或异步)

2. POST(同步或异步)

3. Response及ResponseBody的使用

4. 网络文件类型


OKHttpClient是第三方提供,对HttpURLConnection的升级;相对于HttpURLConnection更建议使用OKHttpClient。HttpURLConnection是URLConnection的子类,提供了更多针对Http协议的功能;如果是简单的HttpURLConnection的get服务,使用URLConnection即可。

0. 使用OKHttpClient前要引入依赖:

在build.gradle(Moduel :app)中添加

implementation 'com.squareup.okhttp3:okhttp:3.14.1'
implementation 'com.squareup.okhttp3:logging-interceptor:3.14.1'
implementation 'com.squareup.okio:okio:1.6.0'

1. GET(同步或异步)

        //创建OKHttpClient
        OkHttpClient okHttpClient=new OkHttpClient.Builder()
                .connectTimeout(50, TimeUnit.SECONDS)
                .readTimeout(50,TimeUnit.SECONDS)
                .writeTimeout(50,TimeUnit.SECONDS)
                .build();
        //创建请求
        Request request=new Request.Builder()
                .url( new URL("http://www.baidu.com") )
                .get() //GET方式用
                .build();
        //创建Call
        Call call=okHttpClient.newCall(request);
        
        //同步
        Response response=call.execute();
        Boolean bool=response.isSuccessful();//判断是否连接成功
        ResponseBody responseBody=response.body();//获取ResponseBody
        //异步
        Response response=call.enqueue(new Callback() {
            public void onFailure(Call call, IOException e) {
                //连接失败调用
            }
            public void onResponse(Call call, Response response) throws IOException {
                //连接成功调用
                ResponseBody responseBody=response.body();//获取ResponseBody
            }
        });

2. POST(同步或异步)

        //创建OKHttpClient
        OkHttpClient okHttpClient=new OkHttpClient.Builder()
                .connectTimeout(50, TimeUnit.SECONDS)
                .readTimeout(50,TimeUnit.SECONDS)
                .writeTimeout(50,TimeUnit.SECONDS)
                .build();
        //创建RequestBody或FormBody或MultipartBody
        RequestBody requestBody = RequestBody.create( 
                MediaType.parse("application/x-www-form-urlencode;charset=utf-8"), 
                "username="+ URLEncoder.encode("myUserName")+"&password="+URLEncoder.encode("123456"));
        FormBody formBody = new FormBody.Builder()
                .add("name","myUserName")
                .add("sex","男")
                .add("age","20")
                .build();
        MultipartBody multipartBody=new MultipartBody.Builder()
                .addFormDataPart("name","myUserName")
                .addFormDataPart("sex","女")
                .addFormDataPart("File",file.toString(),requestBody)
                .build();
        //创建请求
        Request request=new Request.Builder()
                .url( new URL("http://www.baidu.com") )
                .post(requestBody) //POST方式用,参数为RequestBody或FormBody或MultipartBody
                .build();
        //创建Call
        Call call=okHttpClient.newCall(request);

        //同步
        Response response=call.execute();
        Boolean bool=response.isSuccessful();//判断是否连接成功
        ResponseBody responseBody=response.body();//获取ResponseBody
        //异步
        Response response=call.enqueue(new Callback() {
            public void onFailure(Call call, IOException e) {
                //连接失败调用
            }
            public void onResponse(Call call, Response response) throws IOException {
                //连接成功调用
                ResponseBody responseBody=response.body();//获取ResponseBody
            }
        });

RequestBody.create()中的参数 MediaType的 .pase()方法的参数决定了网络文件的类型及编码方式

MultipartBody可添加多种类型数据

3. Response及ResponseBody的使用

    //获取返回类型
    String contentType = response.header("Content-Type");
    //判断返回值类型
    if(contentType!=null&&contentType.equals("application/octet-stream")){
        //返回类型为 流
        ResponseBody responseBody = response.body();
        InputStream inputStream=responseBody.byteStream();
    }
    else if(contentType!=null&&contentType.equals("application/json")){
        //返回类型为 json
        ResponseBody responseBody = response.body();
        String json=responseBody.toString();
    }

4. 网络文件类型(媒体类型)

  • text/html     HTML格式
  • text/pain     纯文本格式
  • image/jpeg     jpg图片格式
  • application/json     JSON数据格式
  • application/octet-stream     二进制流数据
  • application/x-www-form-urlencode     form表单encType属性的默认格式,表单数据以Key/value的形式发送到服务器端
  • multipart/form-data     表单上传文件的格式

tag:URLConnection;HttpURLConnection;OKHttpClient;http;网络;服务器

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下嗷呜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值