Android OkHttp

目录

1.同步和异步

2.OKHTTP同步Get使用步骤

        第一步:添加依赖

        第二步:设置网络权限

        第三步:进行网络请求

3.OKHTTP的异步GET使用步骤

        第一步:添加依赖

        第二步:设置网络权限

        第三步:进行网络请求

        第四步:Handler

3.OKHTTP的同步POST使用步骤

        第一步:添加依赖

        第二步:设置网络权限

        第三步:进行网络请求

        第四步:Handler

4.OKHTTP的异步POST使用步骤

        第一步:添加依赖

        第二步:设置网络权限

        第三步:进行网络请求

5.同步和异步的小结

1.同步和异步

1.同步 GET 的意思是一直等待 http 请求 , 直到返回了响应 . 在这之间会阻塞进程 , 所以通过 get 不能在
Android 的主线程中执行 , 否则会报错 . 对于同步请求在请求时需要开启子线程,请求成功后需要跳转到UI 线程修改 UI
2.异步 GET 是指在另外的工作线程中执行 http 请求 , 请求时 不会阻塞 当前的线程 , 所以可以 Android 主线程中使用. 这种方式不用再次开启子线程,但回调方法是执行在子线程中,所以在更新UI 时还要跳转到 UI 线程中。

2.OKHTTP同步Get使用步骤

      第一步:添加依赖

implementation("com.squareup.okhttp3:okhttp:4.10.0")

      第二步:设置网络权限

AndroidManifest.xml添加Internet

<uses-permission android:name="android.permission.INTERNET" />

        第三步:进行网络请求

1. 创建线程
2. 创建客户端
3. 创建请求
4. 使用客户端发送请求
5. 处理返回结果
               new Thread(new Runnable() {
                    @Override
                    public void run() {
                    //创建客户端
                       OkHttpClient httpClient=new OkHttpClient();
                        //发送请求
                       Request request=new Request.Builder()
                               .url("https://api.vvhan.com/api/girl?type=json")
                               .build();
                        //使用客户端发送请求
                       try (Response response=httpClient.newCall(request).execute()) {
                            zhi=response.body().string();
                            handler.sendEmptyMessage(0x111);
                       } catch (IOException e) {
                           e.printStackTrace();
                       }
                    }
                }).start();

        第四步:Handler

 public Handler handler=new Handler(Looper.getMainLooper()){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            if (msg.what==0x111){
                try {
                    JSONObject object=new JSONObject(zhi);
                    String imgurl=object.getString("imgurl");
                    Glide.with(MainActivity.this).load(imgurl).into(iv_show);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }
    };

3.OKHTTP的异步GET使用步骤

        第一步:添加依赖

        
implementation("com.squareup.okhttp3:okhttp:4.10.0")

        第二步:设置网络权限

AndroidManifest.xml添加Internet

<uses-permission android:name="android.permission.INTERNET" />

        第三步:进行网络请求

1. 创建客户端
2. 创建请求
3. 使用客户端发送异步请求
4. 创建回调方法
5. 处理返回结果
OkHttpClient client=new OkHttpClient();
                Request request=new Request.Builder()
                        .url("https://api.vvhan.com/api/girl?type=json")
                        .build();
                client.newCall(request).enqueue(new Callback() {
                    @Override
                    public void onFailure(@NonNull Call call, @NonNull IOException e) {

                    }

                    @Override
                    public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                        zhi=response.body().string();
                        handler.sendEmptyMessage(0x111);
                    }
                });

        第四步:Handler

public Handler handler=new Handler(Looper.getMainLooper()){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            if (msg.what==0x111){
                try {
                    JSONObject object=new JSONObject(zhi);
                    String imgurl=object.getString("imgurl");
                    Glide.with(MainActivity.this).load(imgurl).into(iv_show);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }
    };

3.OKHTTP的同步POST使用步骤

        第一步:添加依赖

implementation("com.squareup.okhttp3:okhttp:4.10.0")

        第二步:设置网络权限

AndroidManifest.xml 添加 Internet
<uses-permission android:name="android.permission.INTERNET" />

        第三步:进行网络请求

1. 创建线程
2. 创建客户端
3. 构建请求体,将传递参数放到请求体中
4. 创建请求
5. 使用客户端发送请求
6. 处理返回结果
new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpClient client=new OkHttpClient();
                MediaType mediaType=MediaType.Companion.parse("application/json;charset=utf-8");
                RequestBody body=RequestBody.Companion.create(param,mediaType);
                Request request=new Request.Builder()
                        .url("http://192.168.17.181:8080/TestWeb_war_exploded/login")
                        .post(body)
                        .build();
                try (Response response=client.newCall(request).execute()){
                        result=response.body().string();
                        handler.sendEmptyMessage(0x111);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();

        第四步:Handler

public Handler handler=new Handler(Looper.getMainLooper()){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            if (msg.what==0x111){
                Toast.makeText(MainActivity2.this,result,Toast.LENGTH_SHORT).show();
            }
        }
    };

4.OKHTTP的异步POST使用步骤

        第一步:添加依赖

implementation("com.squareup.okhttp3:okhttp:4.10.0")

        第二步:设置网络权限

AndroidManifest.xml 添加 Internet
<uses-permission android:name="android.permission.INTERNET" />

        第三步:进行网络请求

1. 创建客户端
2. 构建请求体,将传递参数放到请求体中
3. 创建请求
4. 使用客户端发送请求
5. 创建回调方法
6. 处理返回结果
OkHttpClient okHttpClient=new OkHttpClient();
        MediaType mediaType=MediaType.Companion.parse("application/json;charset=utf-8");
        RequestBody body=RequestBody.Companion.create(param,mediaType);
        Request request=new Request.Builder()
                .url("http://192.168.17.181:8080/TestWeb_war_exploded/login")
                .post(body)
                .build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {
                Log.i("aaa","bbb");
            }

            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                result=response.body().string();
                handler.sendEmptyMessage(0x111);
            }
        });

          第四步:Handler

public Handler handler=new Handler(Looper.getMainLooper()){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            if (msg.what==0x111){
                Toast.makeText(MainActivity2.this,result,Toast.LENGTH_SHORT).show();
            }
        }
    };

        

5.同步和异步的小结

1. 同步需要开启线程,异步不需要开启线程
2. 同步和异步都需要跳转到 UI 线程修改 UI

      

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值