IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> OkHttp基础用法 -> 正文阅读

[移动开发]OkHttp基础用法

OKHttp的基础用法



  • 准备工作
  • 核心代码



第一章 准备工作

第01节 资源库的准备

1、位置

在 build.gradle 当中的 dependencies 里面导入 okhttp 的操作。

2、代码

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



第02节 清单文件权限

1、位置

在 manifests 清单文件当中的 AndroidManifest.xml 当中引入网络权限

2、代码

<!--  导入网络权限  -->
<uses-permission android:name="android.permission.INTERNET"/>



第03节 布局控件准备

1、位置

res/layout/activity_main.xml 当中添加按钮信息。

2、代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    
    <Button
        android:id="@+id/getsync"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/getsync"/>

    <Button
        android:id="@+id/getasync"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="GET异步请求"/>

    <Button
        android:id="@+id/postsync"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="POST同步请求"/>

    <Button
        android:id="@+id/postasync"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="POST异步请求"/>

</LinearLayout>



第04节 提前创建对象

1、位置

在 MainActivity 里面,提前创建好 OkHttp的对象,以便于下面的使用

2、代码

/*
	在 MainActivity 当中的代码实现
*/
public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private OkHttpClient okHttpClient;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
        //需要提前准备好的okHttp的对象
        okHttpClient = new OkHttpClient();
    }
}



第二章 核心代码

第01节 GET同步请求

1、说明

GET 同步请求:
	1、同步的操作,需要放在线程当中执行
	2、完成需要的步骤有四步:
			A. 获取到请求的对象
			B. 获取到回调的对象
			C. 同步请求,得到响应对象
			D. 获取到响应体信息

2、代码

//GET请求, 同步的 GET请求方式
btnGetSync.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        new Thread(()->{
            try {
                //1、获取到请求的对象
                Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").get().build();
                //2、获取到回调的对象
                Call call = okHttpClient.newCall(request);
                //3、同步请求,得到响应的对象
                Response response = call.execute();
                //4、获取到响应体信息
                Log.i(TAG, "onClick: GET-SYNC "+response.body().string());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }).start();
    }
});

3、日志

2021-10-20 16:28:51.845 19762-19808/chc.svip.demo01 I/MainActivity: onClick: GET-SYNC {
      "args": {
        "a": "1", 
        "b": "2"
      }, 
      "headers": {
        "Accept-Encoding": "gzip", 
        "Host": "www.httpbin.org", 
        "User-Agent": "okhttp/4.9.0", 
        "X-Amzn-Trace-Id": "Root=1-616fd344-3794e0ff40a93e825a466f0f"
      }, 
      "origin": "113.57.157.75", 
      "url": "https://www.httpbin.org/get?a=1&b=2"
    }



第02节 GET异步请求

1、说明

GET 异步请求:
	1、异步的操作,不需要放在线程当中执行,异步操作,内部有线程进行维护
	2、完成需要步骤有四步:
			A. 获取到请求的对象
			B. 获取到回调的对象
			C. 异步请求,执行 CallBack
			D. 判断响应是否成功,获取响应体信息

2、代码

//GET请求, 异步的 GET请求方式
btnGetAsync.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //1、获取到请求的对象
        Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").get().build();
        //2、获取到回调的对象
        Call call = okHttpClient.newCall(request);
        //3、异步请求,执行CallBack
        call.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 {
                //判断响应是否成功了?
                if (response.isSuccessful()){
                    //输出响应体
                    Log.i(TAG, "onResponse: GET-ASYNC "+response.body().string());
                }
            }
        });
    }
});

3、日志

2021-10-20 16:33:18.702 19762-19959/chc.svip.demo01 I/MainActivity: onResponse: GET-ASYNC {
      "args": {
        "a": "1", 
        "b": "2"
      }, 
      "headers": {
        "Accept-Encoding": "gzip", 
        "Host": "www.httpbin.org", 
        "User-Agent": "okhttp/4.9.0", 
        "X-Amzn-Trace-Id": "Root=1-616fd44f-579aac220d280ce05e86ca34"
      }, 
      "origin": "113.57.157.75", 
      "url": "https://www.httpbin.org/get?a=1&b=2"
    }



第03节 POST同步请求

1、说明

POST 同步请求:
	1、同步的操作,需要放在线程当中执行
	2、完成需要步骤有五步:
			A. 封装请求体数据
			B. 获取到请求的对象
			C. 获取到回调的对象
			D. 执行同步请求,获取到响应对象
			E. 通过响应对象,展示数据结果

2、代码

//POST请求, 同步的 POST请求方式
btnPostSync.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        new Thread(()->{
            try {
                //1、封装请求体数据
                FormBody formBody = new FormBody.Builder().add("a","1").add("b","2").build();
                //2、获取到请求的对象
                Request request = new Request.Builder().url("https://www.httpbin.org/post").post(formBody).build();
                //3、获取到回调的对象
                Call call = okHttpClient.newCall(request);
                //4、执行同步请求,获取到响应对象
                Response response = call.execute();
                //5、展示数据结果
                Log.i(TAG, "onClick: POST-SYNC "+response.body().string());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }).start();
    }
});

3、日志

2021-10-20 16:37:55.649 19762-20263/chc.svip.demo01 I/MainActivity: onClick: POST-SYNC {
      "args": {}, 
      "data": "", 
      "files": {}, 
      "form": {
        "a": "1", 
        "b": "2"
      }, 
      "headers": {
        "Accept-Encoding": "gzip", 
        "Content-Length": "7", 
        "Content-Type": "application/x-www-form-urlencoded", 
        "Host": "www.httpbin.org", 
        "User-Agent": "okhttp/4.9.0", 
        "X-Amzn-Trace-Id": "Root=1-616fd564-2ead68b34363d59972d1ab60"
      }, 
      "json": null, 
      "origin": "113.57.157.75", 
      "url": "https://www.httpbin.org/post"
    }



第04节 POST异步请求

1、说明

POST 异步请求:
	1、异步的操作,不需要在线程当中执行,异步操作,内部有线程进行维护
	2、完成需要步骤有五步:
			A. 封装请求体数据
			B. 获取请求的对象
			C. 获取到回调的对象
			D. 执行异步请求
			E. 判断响应成功

2、代码

//POST请求, 异步的 POST请求方式
btnPostAsync.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //1、封装请求体数据
        FormBody formBody = new FormBody.Builder().add("a","1").add("b","2").build();
        //2、获取到请求的对象
        Request request = new Request.Builder().url("https://www.httpbin.org/post").post(formBody).build();
        //3、获取到回调的对象
        Call call = okHttpClient.newCall(request);
        //4、执行异步请求
        call.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 {
                //5、判断是否响应成功
                if (response.isSuccessful()){
                    //展示结果
                    Log.i(TAG, "onResponse: POST-ASYNC "+response.body().string());
                }
            }
        });
    }
});

3、日志

2021-10-20 16:42:33.448 19762-20527/chc.svip.demo01 I/MainActivity: onResponse: POST-ASYNC {
      "args": {}, 
      "data": "", 
      "files": {}, 
      "form": {
        "a": "1", 
        "b": "2"
      }, 
      "headers": {
        "Accept-Encoding": "gzip", 
        "Content-Length": "7", 
        "Content-Type": "application/x-www-form-urlencoded", 
        "Host": "www.httpbin.org", 
        "User-Agent": "okhttp/4.9.0", 
        "X-Amzn-Trace-Id": "Root=1-616fd67a-6e7191e65578212416d6defd"
      }, 
      "json": null, 
      "origin": "113.57.157.75", 
      "url": "https://www.httpbin.org/post"
    }






  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-21 12:18:02  更:2021-10-21 12:18:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:39:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码