• OKHttp


    1 .3 OKHttp是什么

    OKHttp是一个网络请求开源项目, Android网络请求轻量级框架,支持文件上传与下载,支持https。

    2.OKHttp的作用

    2.1 OKHttp是一个高效的HTTP库:

    支持HTTP/2, HTTP/2通过使用多路复用技术在一个单独的TCP连接上支持并发, 通过在一个连接上 一次性发送多个请求来发送或接收数据 如果HTTP/2不可用, 连接池复用技术也可以极大减少延时 支持GZIP, 可以压缩下载体积 响应缓存可以直接避免重复请求 会从很多常用的连接问题中自动恢复 如果您的服务器配置了多个IP地址, 当第一个IP连接失败的时候, OKHttp会自动尝试下一个IP OKHttp还处理了代理服务器问题和SSL握手失败问题

    2.2 优势

    使用 OKHttp无需重写您程序中的网络代码。 OKHttp实现了几乎和java.net.HttpURLConnection一样的

    API。如果您用了 Apache HttpClient,则OKHttp也提供了一个对应的OKHttp-apache 模块

    3.OKHttp的基本使用

    OKHttp的同步GET使用步骤

    第一步:添加依赖

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

    第二步:设置网络权限

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

    第三步:进行网络请求

    1. 创建线程

    2. 创建客户端

    3. 创建请求

    4. 使用客户端发送请求

    5. 处理返回结果

    1. new Thread(new Runnable() {
    2. @Override
    3. public void run() {
    4. //创建客户端
    5. OkHttpClient client = new OkHttpClient();
    6. //创建请求
    7. Request request = new Request.Builder()
    8. .url("https://api.vvhan.com/api/mobil.girl?type=json")
    9. .build();
    10. //使用客户端发送请求
    11. try (Response response = client.newCall(request).execute()) {
    12. result = response.body().string();
    13. handler.sendEmptyMessage(0x111);
    14. } catch (IOException e) {
    15. e.printStackTrace();
    16. }
    17. }
    18. }).start();
    19. }
    20. });
    21. }
    22. private Handler handler = new Handler(Looper.getMainLooper()) {
    23. @Override
    24. public void handleMessage(@NonNull Message msg) {
    25. super.handleMessage(msg);
    26. if (msg.what == 0x111) {
    27. try {
    28. JSONObject object = new JSONObject(result);
    29. String imgurl = object.getString("imgurl");
    30. Glide.with(MainActivity.this).load(imgurl).into(im_show);
    31. } catch (JSONException e) {
    32. e.printStackTrace();
    33. }
    34. }

    OKHttp的异步GET使用步骤

    第一步:添加依赖

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

    第二步:设置网络权限

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

    第三步:进行网络请求

    1. 创建线程

    2. 创建客户端

    3. 创建请求

    4. 使用客户端发送请求

    5. 处理返回结果

    1. OkHttpClient client = new OkHttpClient();
    2. Request request = new Request.Builder()
    3. .url("https://api.vvhan.com/api/mobil.girl?type=json")
    4. .build();
    5. client.newCall(request).enqueue(new Callback() {
    6. @Override
    7. public void onFailure(@NonNull Call call, @NonNull IOException e) {
    8. Log.i("nofailure", "fail");
    9. }
    10. @Override
    11. public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
    12. result = response.body().string();
    13. handler.sendEmptyMessage(0x111);
    14. Log.i("onResponse", result);
    15. }
    16. });
    17. private Handler handler = new Handler(Looper.getMainLooper()) {
    18. @Override
    19. public void handleMessage(@NonNull Message msg) {
    20. super.handleMessage(msg);
    21. if (msg.what == 0x111) {
    22. try {
    23. JSONObject object = new JSONObject(result);
    24. String imgurl = object.getString("imgurl");
    25. Glide.with(MainActivity.this).load(imgurl).into(im_show);
    26. } catch (JSONException e) {
    27. e.printStackTrace();
    28. }
    29. }
    30. }

    OKHttp的同步POST使用步骤

    第一步:添加依赖

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

    第二步:设置网络权限

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

    第三步:进行网络请求

    1. 创建线程

    2. 创建客户端

    3. 创建请求体,将参数放到请求体当中

    4.创建请求

    5. 使用客户端发送请求

    6. 处理返回结果

    1. new Thread(new Runnable() {
    2. @Override
    3. public void run() {
    4. OkHttpClient client = new OkHttpClient();
    5. MediaType mediaType =
    6. MediaType.Companion.parse("application/json;charset=utf-8");
    7. MediaType param = null;
    8. RequestBody stringBody = RequestBody.Companion.create(String.valueOf(param), mediaType);
    9. Request request = new Request.Builder()
    10. .url("http://192.168.17.181:8080/TestWeb_war_exploded/login")
    11. .post(stringBody)
    12. .build();
    13. try (Response response = client.newCall(request).execute()) {
    14. result = response.body().string();
    15. handler.sendEmptyMessage(0x111);
    16. } catch (IOException e) {
    17. e.printStackTrace();
    18. }
    19. }
    20. }).start();
    21. }
    22. });
    23. }
    24. private Handler handler = new Handler(Looper.getMainLooper()) {
    25. @Override
    26. public void handleMessage(@NonNull Message msg) {
    27. super.handleMessage(msg);
    28. if (msg.what == 0x111) {
    29. Toast.makeText(MainActivity2.this, result, Toast.LENGTH_LONG).show();
    30. }
    31. }

    OKHttp的异步POST使用步骤

    第一步:添加依赖

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

    第二步:设置网络权限

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

    第三步:进行网络请求

    1. 创建线程

    2. 创建客户端

    3. 创建请求体,将参数放到请求体当中

    4.创建请求

    5. 使用客户端发送请求

    6. 处理返回结果

    1. OkHttpClient okHttpClient = new OkHttpClient();
    2. MediaType type = MediaType.Companion.parse("application/json;charset=utf-8");
    3. MediaType param = null;
    4. RequestBody requestBody = RequestBody.Companion.create(String.valueOf(param), type);
    5. Request request = new Request.Builder()
    6. .url("http://192.168.17.181:8080/TestWeb_war_exploded/login")
    7. .post(requestBody)
    8. .build();
    9. okHttpClient.newCall(request).enqueue(new Callback() {
    10. @Override
    11. public void onFailure(@NonNull Call call, @NonNull IOException e) {
    12. Log.e("onFailure", "fail");
    13. }
    14. @Override
    15. public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
    16. result = response.body().string();
    17. handler.sendEmptyMessage(0x111);
    18. }
    19. });
    20. }

  • 相关阅读:
    无线通信与编码_MATLAB实现Turbo码的仿真_含仿真代码_Dr.WuYufei
    力扣打卡之三个数的最大乘积
    beforeRouteEnter、created、mounted的思考和总结
    众和策略:小盘和大盘的关系?
    Qt对象树
    python实现批量数据库数据插入
    深度学习入门(二十六)卷积神经网络——池化层
    Hadoop+hive+flask+echarts大数据可视化项目之系统数据整合和hadoop环境搭建
    Pycharm配置python3环境
    【ASM】字节码操作 工具类与常用类 AdviceAdapter 介绍 打印方法进入 和 方法退出 的参数
  • 原文地址:https://blog.csdn.net/heqiang260/article/details/126310084