okhttp 的使用

okhttp 是优秀的开源库,学习使用。
square官方地址 : https://square.github.io/okhttp/?FbmNv=5d457a706647bd08
github地址 : https://github.com/square/okhttp

1.添加依赖

在 app 的 build.gradle 下添加

implementation 'com.squareup.okhttp3:okhttp:3.10.0'

2. get操作

新开线程使用

new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    OkHttpClient client = new OkHttpClient();//创建OkHttpClient对象
                    Request request = new Request.Builder()
                            .url(ADDRESS_NETTV)//请求接口。如果需要传参拼接到接口后面。
                            .build();//创建Request 对象
                    Response response = null;
                    response = client.newCall(request).execute();//得到Response 对象
                    if (response.isSuccessful()) {
                        //此时的代码执行在子线程,修改UI的操作请使用handler跳转到UI线程。
                        Log.d("luoah", "[MainActivity.java] -- getDataSync -- response.code():" + response.code());
                        Log.d("luoah", "[MainActivity.java] -- getDataSync -- response.protocol():" + response.protocol());
                        Log.d("luoah", "[MainActivity.java] -- getDataSync -- response.message():" + response.message());
                        Log.d("luoah", "[MainActivity.java] -- getDataSync -- response.body().string():" + response.body().string());
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();

异步操作

OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url("http://www.baidu.com")
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d("luoah", "[MainActivity.java] -- onFailure -- e.getMessage():" + e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {//回调的方法执行在子线程。
                    String str = response.body().string();
                    Log.d("luoah", "[MainActivity.java] -- onResponse -- str:" + str);
                }
            }
        });

3. post操作

用 FormBody 传递键值对参数

kHttpClient client = new OkHttpClient();
        FormBody formBody = new FormBody
                .Builder()
                .add("lah", "123123")//传递键值对
                .build();
        Request request = new Request
                .Builder()
                .url(ADDRESS_JIANSHU)
                .post(formBody)
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
            
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
            
            }
        });

用 RequestBody 传递 Json

OkHttpClient client = new OkHttpClient();
        //RequestBody中的MediaType指定为纯文本,编码方式是utf-8
        MediaType mediaType = MediaType.parse("text/plain;charset=utf-8\"");
        String jsonStr = "{\"username\":\"lah\",\"userpassword\":\"123123\"}";//json数据.
        RequestBody requestBody = RequestBody.create(mediaType, jsonStr);

        Request request = new Request
                .Builder()
                .url(ADDRESS_BAIDU)
                .post(requestBody)
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
            
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
            
            }
        });

用 RequestBody 传递 File

OkHttpClient client = new OkHttpClient();
        MediaType mediaType = MediaType.parse("text/x-markdown; charset=utf-8");
        File file = new File("README.md");
        Request request = new Request
                .Builder()
                .url("https://api.github.com/markdown/raw")
                .post(RequestBody.create(mediaType, file))
                .build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String responseStr = response.body().string();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //refresh UI
                    }
                });
            }
        });

用 MultipartBody 同时传递 键值对参数 和 File 对象

//1.创建OkHttpClient对象
        OkHttpClient  okHttpClient = new OkHttpClient();
        //上传的图片
        File file = new File(Environment.getExternalStorageDirectory(), "zhuangqilu.png");
        //2.通过new MultipartBody build() 创建requestBody对象,
        RequestBody  requestBody = new MultipartBody.Builder()
                //设置类型是表单
                .setType(MultipartBody.FORM)
                //添加数据
                .addFormDataPart("username","lll")
                .addFormDataPart("age","25")
                .addFormDataPart("image","haha.png",
                        RequestBody.create(MediaType.parse("image/png"), file))
                .build();
        //3.创建Request对象,设置URL地址,将RequestBody作为post方法的参数传入
        Request request = new Request
                .Builder()
                .url(ADDRESS_JIANSHU)
                .post(requestBody)
                .build();
        //4.创建一个call对象,参数就是Request请求对象
        Call call = okHttpClient.newCall(request);
        //5.请求加入调度,重写回调方法
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
            }
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OkHttp是一个处理网络请求的开源项目,是Android使用最广泛的网络框架。它适用于Android 5.0(API级别21)和Java 8。使用OkHttp发送HTTP请求的过程如下: 1. 域名解析(DNS):将域名解析为IP地址。 2. 建立TCP连接:通过三次握手建立TCP连接。 3. 发起HTTP请求:建立TCP连接后,使用Socket输出流将HTTP报文写出。 4. 等待响应:等待服务器响应。 5. 解析响应:解析服务器返回的HTTP响应。 6. 处理响应数据:根据需要处理响应数据,比如解析JSON或下载文件。 在使用OkHttp时,首先需要创建一个Request对象,可以使用Request.Builder()来构建。然后通过Request对象获得一个Call对象,可以使用client.newCall(request)来创建。接下来,可以使用call.execute()进行同步调用或者call.enqueue()进行异步调用。最后,可以通过Response对象获取响应数据。 总之,使用OkHttp很简单,它的请求/响应API使用了流畅的构建器设计和不可变性设计,支持同步阻塞调用和带有回调的异步调用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [android的OkHttp使用](https://blog.csdn.net/hanjiexuan/article/details/115894233)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [android okhttp的基础使用【入门推荐】](https://download.csdn.net/download/weixin_38516386/12788438)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值