Android中使用OkHttp的五种请求方式及注意事项

基本使用——OkHttp3详细使用教程 概述 OkHttp现在应该算是最火的Http第三方库,Retrofit底层也是使用OkHttp,网上很多教程都写的不错,但是有些我认为重要的知识,大多一笔带过,所以我决定写一篇入门文章 OkHttp官网地址:http://square.github.io/okhttp/ OkHttp GitHub地址:https://github.com/square/okhttp 出现背景 网络... 阅读详情

一、环境说明

1、在gradle中引入依赖

    implementation 'com.squareup.okhttp3:okhttp:3.12.1'
    debugImplementation 'com.squareup.okhttp3:logging-interceptor:3.12.1'

2、AndroidManifest中开启网络权限

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

注意:

在android9.0以后,Android默认禁止使用Http协议,必须使用Https协议,否则会报错误。

在这里插入图片描述

所以要使用Http协议的请求必须在AndroidManifest中添加属性,android:usesCleartextTraffic=“true”

3、搭建测试接口

package com.icodingzy.androidback.controller;

import com.icodingzy.androidback.pojo.User;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("user")
public class UserController {
    /**
     * GET NoParameter
     * @return
     */
    @GetMapping("getUser")
    public Object getUser() {
        User user = new User();
        user.setId((int) (Math.random()*100));
        user.setName("熊顺");
        user.setStudentId("201815110110" + (int) (Math.random()*100));
        user.setSex("男");
        user.setData("Not have Parameter!");
        return user;
    }

    /**
     * GET TakeParameter
     * @param id userId
     * @return
     */
    @GetMapping("getParamUser")
    public Object getParamUser(Integer id){
        User user = new User();
        user.setId(id);
        user.setName("熊顺");
        user.setStudentId("201815110110" + (int) (Math.random()*100));
        user.setSex("男");
        user.setData("parameter is " + id);
        return user;
    }
    /**
     * Post NoParameter
     * @return
     */
    @PostMapping("postNoParamUser")
    public Object postNoParamUser(){
        User user = new User();
        user.setId((int) (Math.random()*100));
        user.setName("熊顺");
        user.setStudentId("201815110110" + (int) (Math.random()*100));
        user.setSex("男");
        user.setData("Not have parameter");
        return user;
    }
    /**
     * Post TakeParameter
     * @param id userId
     * @return
     */
    @PostMapping("postParamUser")
    public Object postParamUser(Integer id){
        User user = new User();
        user.setId(id);
        user.setName("熊顺");
        user.setStudentId("201815110110" + (int) (Math.random()*100));
        user.setSex("男");
        user.setData("parameter is " + id);
        return user;
    }
    /**
     * Post ObjectParameter
     * @return
     */
    @PostMapping("postObjectParamUser")
    public Object postObjectParamUser(@RequestBody User user){
        return user;
    }
}

接口文档

说明请求方式请求参数请求地址
GET 方式,无参数GET无/user/getUser
GET方式,Int参数GETInt(id)/user/getParamUser
Post方式,无参数POST无/user/postNoParamUser
Post方式,有参数POSTInt(id)/user/postParamUser
Post方式,Json化参数POSTObject(id,name,sex,studentId,sex,data)/user/postObjectParamUser

4、编写OkHttp工具类

package com.zhuoyue.travelwh.OkHttpUtil;


import android.app.ProgressDialog;
import android.content.Context;
import android.util.Log;


import com.zhuoyue.travelwh.bean.MsgBean;

import org.greenrobot.eventbus.EventBus;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class OkHttpUtil {
    public static ProgressDialog dialog;

    /**
     * 发送网络请求
     * @param url 请求Url
     * @param context 上下文对象
     * @param body 请求体,如果有请求体则发送Post请求,反之发送Get请求
     */
    public static void getHttpRequset(String url, Context context, RequestBody body) {
        startDialog(context);
        OkHttpClient client = new OkHttpClient();

        Request request = null;
        
            //Post请求
        if (body != null) {
            request = new Request.Builder()
                    .url(url)
                    .post(body)
                    .build();
        } else {
        //Get请求
            request = new Request.Builder()
                    .url(url)
                    .get()
                    .build();
        }

        client.newCall(request).enqueue(new Callback() {
            /*请求失败时的回调*/
            @Override
            public void onFailure(Call call, IOException e) {
                stopDialog();
                Log.e("onFailure: ", e.getMessage());
            }
            /*请求成功时的回调*/
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                stopDialog();
                Log.e("ApiData:", response.body().string());
            }
        });
    }

    /**
     * 显示等待框
     * @param context
     */
    public static void startDialog(Context context) {
        dialog = new ProgressDialog(context);
        dialog.setMessage("数据加载。。。");
        dialog.setTitle("请稍后");
        dialog.setCanceledOnTouchOutside(false);
        dialog.show();
    }

    /**
     * 关闭等待框
     */
    public static void stopDialog() {
        if (dialog != null) {

            dialog.dismiss();
        }
    }
}

二、发送请求

1.发送无参的Get请求

在自己的业务中使用工具类发送网络请求

	//无参接口
   private final String url = "http://xxxxxx/user/getParamUser";
      @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        OkHttpUtil.getHttpRequset(url,this,null);
    }

打印结果如下
E/ApiData:: {“id”:82,“name”:“熊顺”,“studentId”:“20181511011066”,“sex”:“男”,“data”:“Not have Parameter!”}

在这里插入图片描述

2.发送有参的Get请求

OkHttp发送Get请求时,请求参数全部放在url中

//有参Get接口
   private final String url = "http://xxxxxx/user/getParamUser";
      @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        OkHttpUtil.getHttpRequset(url + "?id=9999",this,null);
    }

在这里插入图片描述

3.发送无参Post请求

发送Post请求时必需要带上请求体

//无参Post接口
   private final String url = "http://xxxxxx/user/postNoParamUser";
      @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        RequestBody body = new FormBody.Builder()
                        .build();
                OkHttpUtil.getHttpRequset(url, this, body);
    }

在这里插入图片描述

4.发送有参Pos请求

add中固定为String类型

//有参Post接口
   private final String url = "http://xxxxxx/user/postParamUser";
      @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        RequestBody body = new FormBody.Builder()
                        .add("id","8888")
                        .build();
                OkHttpUtil.getHttpRequset(url, this, body);
    }

在这里插入图片描述

5.发送Post 的Json数据

发送Json数据需要借助JSONObject,把数据转换成Json格式

//Json化参数Post接口
   private final String url = "http://xxxxxx/user/postObjectParamUser";
      @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        JSONObject jsonObject = new JSONObject();
                try {
                    jsonObject.put("id",1111111);
                    jsonObject.put("name","顺");
                    jsonObject.put("studentId","123123");
                    jsonObject.put("sex","小萌新");
                    jsonObject.put("data","I have pan");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                RequestBody body = FormBody.create(MediaType.parse("application/json;charset=utf-8"), jsonObject.toString());

                OkHttpUtil.getHttpRequset(url, this, body);
    }

在这里插入图片描述

OkHttp全解析(一)——基本概念与使用方法 背景 基本用法 同步请求、异步请求、 核心流程 对比 httpconnectionUrl 初探源码 OKHttp请求流程 网络请求缓存处理 连接池 经典设计模式的应用 责任链模式 建造者模式 收获与展望 参考文献 ​ 阅读详情

相关推荐

Android OkHttp 添加 Https 单向认证证书

OkHttpClient.Builder builder = new OkHttpClient().newBuilder(); try { //keystore添加证书内容和密码 KeyStore keyStore = KeyStore.getInstance("PKCS12"); //自己的.p12文件 ...

qq1592981094的博客 1722

OkHttp基本使用教程

OkHttp基本使用教程(安卓端流行的http请求框架) 简介 android网络框架之OkHttp,一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient,但仍可引入Jar包使用)。 OkHttp是一个高效的HTTP客户端,它有以下默认特性: 允许连接...

Mr.Zhang的博客 2万+

【Android-网络编程】OKHttp使用总结

本文总结归纳了OKHttp的使用步骤和使用时的注意事项。 okhttp的介绍:相比于利用API写网络请求,使用okhttp框架可以简化代码量,这是官方对okhttp的解释说明: HTTP是现代应用程序网络的方式。这就是我们交换数据和媒体的方式。有效地执行HTTP可使您的内容加载更快并节省带宽。 OkHttp是默认情况下有效的HTTP客户端: HTTP / 2支持允许对同一主机的所有请求共享一个...

qq_40716430的博客 634

OkHttp用法详解

OkHttp用法详解

ruanyandong的博客 1万+

Android网络请求框架OKHttp的使用详解

本文通过简单明了的示例介绍了如何在Android项目中使用OKHttp进行网络请求。以上代码中,我们在onResponse方法中处理了请求成功的响应数据,在onFailure方法中处理了请求失败的情况。除了发送基本的GET和POST请求,OKHttp还提供了许多其他功能,包括文件上传、文件下载、连接超时设置等。首先,在你的Android项目中的build.gradle文件中添加OKHttp的依赖项。以上代码中,我们使用FormBody.Builder来构建表单数据,并将其作为POST请求的请求体。

TechBurst的博客 1306

存储关键技术·RAID技术·RAID2.0·华为RAID2.0+·华为服务器·云计算

一.RAID基本概念 常见的RAID级别组合RAID级别 二.RAID的数据组织形式 三.RAID的数据保护功能 方法一:镜像方法二:奇偶校验算法(XOR) 四.RAID热备和重构 1.热备(Hot Spare)的定义2.热备的分类3.热备的工作原理 五.RAID 2.0技术 1.RAID 2.02.RAID 2.0+3.华为RAID 2.0+ 六.RAID 2.0+块虚拟化技术 1.什么会出现RAID 2.0+技术?2.什么是RAID 2.0?3.RAID 2.0+的原理是什么?

qq_47480932的博客 3320

Android 网络请求方式

最近需要将Android 项目接入物联网公司提供的接口,所以顺便给大家分享一下Android中我们常用的网络请求吧!提醒大家一下,我们遇到接口需求,一定要先在Postman上测试接口是否正确,然后再去项目上写程序来请求接口;否则,请求出问题,你都不确定是你程序写的有问题还是接口本身提供的有问题。

Ai1114的博客 8598

STM32与AD7606的SPI通信优化:提升高精度数据采集效率

本文深入探讨了STM32与AD7606的SPI通信优化策略,旨在提升高精度数据采集系统的效率与稳定性。文章从硬件连接、电源去耦、PCB布局等基础环节入手,详细解析了软件驱动中SPI模式配置、DMA应用及精准时序控制等关键优化技术,并提出了系统级的性能提升方案,帮助开发者解决高速采样下的数据跳动、效率瓶颈等实际问题。

weixin_29192211的博客 392

Android OkHttp3简介和使用详解

一 OKHttp简介 OKHttp是一个处理网络请求的开源项目,Android 当前最火热网络框架,由移动支付Square公司贡献,用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient)。OKHttpGitHub地址 OKHttp优点 支持HTTP2/SPDY(SPDY是Google开发的基于TCP的...

Admans的专栏 3万+

库卡kuka仿真软件sim Pro 3.1简单实用教程

实验目的 建立机器人,自定义抓手,导入外部模型,掌握工具坐标、基坐标的使用,自动生成轨迹。 实验步骤 打开KUKA.Sim Pro 3.1.2仿真软件,依次点击KUKA Sim Library 3.1 → KUKA_ROBOTS→Small Robots(3kg-10kg)→Archiv→AGILUS-1 Series→sixx,双击KR 6 R700 sixx,加载机器臂到工作空间; 加载自定义抓手。双击Miscellaneous,再双击圆锥Cone设置上半径为0,下半径为40,高为100; 点击“捕

weixin_45168199的博客 4万+

多旋翼飞行器设计与控制·Pixhawk4以及外部设备接线(笔记004)

笔记主要来源:Pixhawk 4 接线快速入门 目录 一、Pixhawk 4 的各个接口 二、接线图概览(重要传感器及外围设备) 三、飞控、GPS的安装和方向 四、电源 五、无线电遥控 六、数传电台(可选) 七、SD Card(可选) 八、电机以及其他外设 一、Pixhawk 4 的各个接口 FMU:Flight Management Unit 飞行管理组件 主 FMU 处理器:STM32F765 32 位 Arm® Cortex®-M7,216MHz,2MB...

猪猪的博客 1万+

Android:使用OkHttp框架与后台通信、获取数据

摘要:本文介绍了Android应用如何与服务器通信的一些机制,并分享了笔者的一些开发经验与技巧,通过具体的代码描述OkHttp框架的使用,适合初学者。 1 - 引言 不太严谨地说,接入网络的终端(手机、主机等)都是通过网络层(IP层)的报文/数据报进行沟通的(而向具体的某个程序递交报文是传输层的事)。具体可以参考百度百科-五层因特网协议栈的一些介绍,我们只需要了解一些基本原理就好了。 狭义的理解...

Xu_JL1997的博客 7483

php对接建行h5网页支付

php对接建行h5网页支付前言H5页面支付H5页面支付回调通知退款及其他的业务 前言 最近接到公司乙方要求,需要再支付上面增加建行的支付渠道。之前一直用的都是微信和支付宝这种第三方支付平台,银行直接对接比较少。没办法就只能上网搜索,搜索一番返现网上对接建行的资料比较少,没办法只好摸着石头过河,中间也借鉴了一些大佬的文章内容。 H5页面支付 根据建行的h5网页支付对接文档,还是可以看出是比较简单的。...

lihua100862的博客 5408

Android studio进阶开发(四)--okhttp的网络通信的使用

Android studio okhttp http网络通信的初级实验

lll23333l的博客 1668

量化平台深度测评:聚宽 / 米筐 / 迅投 QMT 对比分析

本文对比测评国内主流量化交易平台聚宽、米筐和迅投QMT,从回测性能、实盘稳定性和高级功能三方面展开分析。测试显示:聚宽在低频策略回测中效率最高(128秒),米筐次之;迅投QMT凭借C++直连架构实现最低延迟(150ms)和最高订单撤销成功率(98.5%)。平台特色方面,QMT的智能拆单算法可减少25%滑点损失,聚宽的因子库支持版本控制和缓存复用。建议低频策略选聚宽,高频交易选QMT,团队协作优先考虑聚宽。测试数据均来自合规实盘环境,建议根据策略特性进行试用验证。

tianchi2009123的博客 7371

Java接入DeepSeek大模型:从零实现流式对话+多轮会话管理(完整项目实战)

emitter.completeWithError(new RuntimeException("连接DeepSeek服务超时"));private static final Set<String> BLACK_WORDS = Set.of("暴力", "色情", "政治敏感");emitter.onCompletion(() -> log.info("SSE连接完成"));emitter.onTimeout(() -> log.warn("SSE连接超时"));// 每个路由基础连接数。

wjianwei666的专栏 927

Android OKHTTP的使用

一,OKHttp介绍okhttp是一个第三方类库,用于android中请求网络。这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCanary) 。用于替代HttpUrlConnection和Apache HttpClient(android API23 里已移除HttpClient)。okhttp有自己的官网,官网网址:OKHtt...

Larry的博客 8676

【unity小技巧】新输入系统InputSystem游戏运行中改键重新绑定控制按键(最全最完美解决方案)

在游戏开发中,控制输入是至关重要的一环。Unity的新输入系统(Input System)为开发者提供了强大的工具来管理和处理用户输入,不仅支持各种平台上的多种输入设备,还能轻松处理复杂的输入操作和映射。本文将深入探讨如何使用Unity的新输入系统重新绑定控制按键,为开发者提供一套全面且完善的解决方案。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 7356

android OKHttp的基本使用详解

今天,简单讲讲Android里如何使用OKHttp。   Android框架系列: 一.android EventBus的简单使用 二.android Glide简单使用 三.android OKHttp的基本使用详解   简单说一下学习okhttp的理由 google在Android 6.0中删除了HttpClient的Api,采用的是则是okhttp 高效的使用HTTP,使应...

谢岩的博客 7332

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

OkHttp3简介和使用详解

1 简介 OKHttp是一个当前主流的网络请求的开源框架 Square公司开发,用于替代HttpUrlConnection和Apache HttpClient Android4.4开始,google已经开始将源码中的HttpURLConnection替换为OkHttp Android6.0里已移除HttpClient 优点 (版本一) 支持HTTP2/SPDY(SPDY是Google开发...

jiaonizuoren的博客 3万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Android HTTP请求方式:HttpClient

Android HttpClient 学习指南 Apache HttpClient 曾是 Android 网络请求的主流库,但在 API 22 后被废弃,官方推荐使用 HttpURLConnection 或 OkHttp/Retrofit。本指南涵盖 HttpClient 的核心使用,包括依赖配置、GET/POST 请求实现及资源释放。尽管已过时,了解 HttpClient 对维护旧项目仍有价值。 核心内容: 废弃原因:Android 5.1+ 移除以优化系统库,推荐 OkHttp 或 HttpURLCon

m0_57545130的博客 875

Android基于OkHttp实现文件上传

一:相关概述 Android请求访问服务端大多数情况下依旧是使用http协议,故而可以参照web端的数据传输形式来实现。 multipart/form-data是浏览器提交表单上传文件的一种方式。 有关于http的get,post请求大家可以自行百度了解。 OkHttp是一款优秀的HTTP框架,它支持get请求和post请求,支持基于Http的文件上传和下载,支持加载图片,支持下载文件透明...

凌天 8605

android_框架_okhttp使用详解

转载自: https://www.jianshu.com/p/7d10f25b2492 Android OkHttp3简介和使用详解 一 、OKHttp简介 OKHttp是一个处理网络请求的开源项目,Android 当前最火热网络框架,由移动支付Square公司贡献,用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient)。 GitHub地址:https://github.com/square/okhttp 1、OK.

写bug的蚊子的博客 1122

Android Studio中Okhttp的使用

Android Studio中Okhttp的使用 首先要使用Okhttp在这里插入代码片库就要导入依赖: 在build.gradle文件的dependencies代码块中添加如下语句: dependencies { implementation 'com.squareup.okhttp3:okhttp:4.4.0' implementation 'com.squareup.okio:okio:1.5.0' } OkHttpClient client = new OkHttpClient();

fine123455的博客 969

ModernHttpClient Android实战:OkHttp如何让Xamarin网络请求大幅提速

你的 Xamarin 应用里,`HttpClient` 真的用对了吗?默认的托管实现会把每个请求都当作"新客人"对待,重复握手、重建连接,网络请求自然又慢又卡。而 **ModernHttpClient** 正是为解决这个问题而生:它通过一个自定义的 `HttpClientHandler`,把 **OkHttp**(Android 端)和 NSURLSession(iOS 端)这些平台原生 HTTP

gitblog_00512的博客 1120

Android使用HttpURLConnection,OKHttp发送请求及注意事项

文章目录1.HttpURLConnection的使用1.编写测试代码1. 使用ScrollView组件接收网站返回数据2.编写活动2.测试结果(注意)2.OKTttp的使用 1.HttpURLConnection的使用 1.编写测试代码 1. 使用ScrollView组件接收网站返回数据 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res

xxayy1314的博客 1883
上一篇: Android 使用Retrofit网络框架
下一篇: Android中WebView的交互细节天气可视化Demo实战
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这次最后一次熬夜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值