OKHttp

19 篇文章 1 订阅

今天来说一下使用OKHttp发发送get和post请求

1.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 client = new OkHttpClient();
// 创建请求
            Request request = new Request.Builder()
                    .url("https://api.vvhan.com/api/mobil.girl?type=json")
                    .build();
// 使用客户端发送请求
            try (Response response = client.newCall(request).execute()) {
                result = response.body().string();
                Log.i("result", result);
                handler.sendEmptyMessage(0x111);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start();

第四步:Handler

private 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(result);
                    String imgurl = object.getString("imgurl");
                    Glide.with(MainActivity.this).load(imgurl).into(iv_show);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }
    };

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. 处理返回结果

OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder()
            .url("https://api.vvhan.com/api/mobil.girl?type=json")
            .build();
client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(@NonNull Call call, @NonNull IOException e) {
            Log.i("onFailure","fail");
        }
        @Override
        public void onResponse(@NonNull Call call, @NonNull Response response)
throws IOException {
            result = response.body().string();
            handler.sendEmptyMessage(0x111);
            Log.i("onResponse", result);
        }
    });

第四步:Handler

private 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(result);
                    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 stringBody = RequestBody.Companion.create(param,
                    mediaType);
            Request request = new Request.Builder()
                    .url("http://192.168.17.181:8080/TestWeb_war_exploded/login")
                    .post(stringBody)
                    .build();
            try (Response response = client.newCall(request).execute()){
                result = response.body().string();
                handler.sendEmptyMessage(0x111);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start();

第四步:Hander

private Handler handler = new Handler(Looper.getMainLooper()) {
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            if (msg.what == 0x111) {
                Toast.makeText(LoginActivity.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 client = new OkHttpClient();
    MediaType type = MediaType.Companion.parse("application/json;charset=utf8");
    RequestBody requestBody = RequestBody.Companion.create(param, type);
    Request request = new Request.Builder()
            .url("http://192.168.17.181:8080/TestWeb_war_exploded/login")
            .post(requestBody)
            .build();
client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(@NonNull Call call, @NonNull IOException e) {
            Log.e("onFailure","fail");
        }
        @Override
        public void onResponse(@NonNull Call call, @NonNull Response
        response) throws IOException {
            result = response.body().string();
            handler.sendEmptyMessage(0x111);
        }
    });

第四步:Haander

​
private 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值