android studio 网络请求okhttp3、okgo

一、在build.gradle文件里添加

implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
implementation 'com.squareup.okio:okio:1.17.4'
implementation 'com.lzy.net:okgo:3.0.4'
implementation 'com.alibaba:fastjson:1.2.57'
implementation 'com.orhanobut:logger:2.2.0'

com.alibaba:fastjson:用于JSON解析,
com.orhanobut:logger:用于输出日志

二、在AndroidManifest.xml里添加

//支持网络请求
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

//其他
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<applicationandroid:name=".App"android:allowBackup="true"android:icon="@mipmap/cookie"android:label="手机端测试"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.Drysister"android:usesCleartextTraffic="true">

//在App里初始化okgo
android:name=".App"
//不安全请求的限制级别,降低安全级别
//参考:解决:qemu_pipe_open_ns:62: Could not connect to the ‘pipe:qemud:network‘ service: Invalid argument 202_qemu_pipe_open_ns:62: could not connect to the 'pi-CSDN博客
android:usesCleartextTraffic="true"

三、新建App,初始化okgo、Logger

public class App extends Application {private static App mInstance;public static App getInstance(){if(mInstance==null){mInstance=new App();}return mInstance;}@Overridepublic void onCreate(){super.onCreate();mInstance = this; OkGo.getInstance().init(this).setOkHttpClient(new OkHttpClient.Builder().readTimeout(10000L, TimeUnit.MILLISECONDS).writeTimeout(10000L, TimeUnit.MILLISECONDS).connectTimeout(10000L, TimeUnit.MILLISECONDS).build()).setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE)   //全局统一缓存时间,默认永不过期,可以不传.setRetryCount(3)                               //全局统一超时重连次数,默认为三次,// 那么最差的情况会请求4次(一次原始请求,三次重连请求),不需要可以设置为0.setCacheMode(CacheMode.NO_CACHE).setCacheTime(-1L);//日志格式化FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder().showThreadInfo(false)  // 是否显示线程信息 默认显示 上图Thread Infrom的位置.methodCount(1)         // 展示方法的行数 默认是2  上图Method的行数.methodOffset(0)        // 内部方法调用向上偏移的行数 默认是0//.logStrategy(customLog) // 改变log打印的策略一种是写本地,一种是logcat显示 默认是后者(当然也可以自己定义).tag("DCSYT")   // 自定义全局tag 默认:PRETTY_LOGGER.build();//在Application中初始化一下Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));Logger.addLogAdapter(new DiskLogAdapter(){@Overridepublic boolean isLoggable(int priority, @Nullable String tag) {return BuildConfig.DEBUG;}});//        Logger.d("Start APP");}}

四、OkGo

         Map<String, String> localMap = new HashMap<>();localMap.put("strdt", "2022-11-03 14:04:02");//strdt=2022-11-03 14:04:02List<String> urlparams=new ArrayList<>();List<File> fileparams=new ArrayList<>();List<HttpParams.FileWrapper> filewrappers=new ArrayList<>();String serveurl="https://stqmf.fzdc.cn/home/getTime";// OkGo.<String>get(serveurl )//get<=>post 请求方式.tag(this)           // 请求的tag,主要用于取消对应的请求
//                        .isMultipart(true)   //制使用multipart/form-data表单上传
//                        .isSpliceUrl(true)   //制将params的参数拼接到url后面.retryCount(3)       // 超时重连次数
//                        .cacheKey("caceKey") // 设置当前请求的缓存key
//                        .cacheTime(5000)     // 缓存的过期时间,单位毫秒
//                        .cacheMode(CacheMode.DEFAULT)        // 缓存模式,详细请看第四部分,缓存介绍
//                        .headers("header1","headervalue1")   // 添鞏玗禧弓罩谨加请求头参数.params(localMap)                    // 添加请求参数
//                        .addUrlParams("key",urlparams)
//                        .addFileParams("key",fileparams)
//                        .addFileWrapperParams("key",filewrappers).execute(new StringCallback() {@Overridepublic void onSuccess(Response<String> response) {Logger.d("OkGo...onSuccess," + response.code() + "-" + response.body());UserDto obj= JSON.parseObject(response.body().toString(),UserDto.class);Logger.d(obj.data);}@Overridepublic  void onError(Response<String> response) {Logger.d("OkGo...onError," + response.code() + "-" + response.body());}});

五、OkHttpClient

 //1.构建OkHttpClient实例final OkHttpClient okHttpClient = new OkHttpClient.Builder().connectTimeout(200, TimeUnit.SECONDS)//链接超时为2秒,单位为秒.writeTimeout(200, TimeUnit.SECONDS)//写入超时.readTimeout(200, TimeUnit.SECONDS)//读取超时.build();//创建线程,在子线程中运行new Thread(new Runnable() {@Overridepublic void run() {try {//1、异步get...//通过Builder辅助类构建Request对象,链式编程String url="https://stqmf.fzdc.cn/home/getTime";HttpUrl.Builder httpBuilder = HttpUrl.parse(url).newBuilder();httpBuilder.addQueryParameter("strdt","2022-11-04 0:04:02");Request request = new Request.Builder().url(httpBuilder.build()).get().build();//异步okHttpClient.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(@NotNull Call call, @NotNull IOException e) {e.printStackTrace();Logger.e("get异步响应失败==" + e.toString());}@Overridepublic void onResponse(@NotNull Call call, @NotNull okhttp3.Response response) throws IOException {String result = response.body().string();Logger.e("get异步响应成功==" + result);UserDto obj=JSON.parseObject(result,UserDto.class);Logger.e(obj.data);}});//2、同步GET
//                            Request request = new Request.Builder()
//                                    .get()//get请求
//                                    .url("https://stqmf.fzdc.cn/home/getTime")//请求地址
//                                    .build();//构建
//                            //通过mOkHttpClient调用请求得到Call
//                            final Call call = okHttpClient.newCall(request);
//                            //执行同步请求,获取Response对象
//                            okhttp3.Response response = call.execute();
//
//                            if (response.isSuccessful()) {//如果请求成功
//                                String string = response.body().string();
//                                Logger.e("get同步请求success==" + string);
//                                //响应体的string()对于小文档来说十分方便高效,但是如果响应体太大(超过1M),应避免使用string()方法,
//                                //因为它会把整个文档加载到内存中,对用超多1M的响应body,应该使用流的方式来处理。
//
//                                //response.body().bytes();//字节数组类型
//                                //response.body().byteStream();//字节流类型
//                                //response.body().charStream();//字符流类型
//
//                            } else {
//                                Logger.e("get同步请求failure==");
//                            }//3、同步POST...
//                            //提交键值对需要用到FormBody,FormBody继承自RequestBody
//                            FormBody formBody = new FormBody.Builder()
//                                    //添加键值对(通多Key-value的形式添加键值对参数)
//                                    .add("key", "value")
//                                    .build();
//
//                            final Request request = new Request.Builder()
//                                    .post(formBody)
//                                    .url("https://stqmf.fzdc.cn/home/getTime")//URL地址
//                                    .build();
//
//                            okhttp3.Response response = okHttpClient.newCall(request).execute();
//                            if (response.isSuccessful()) {
//                                Logger.e("Post请求String同步响应success==" + response.body().string());
//                            } else {
//                                Logger.e("Post请求String同步响应failure==" + response.body().string());
//                            }//4、异步POST...
//                            okHttpClient.newCall(request).enqueue(new Callback() {
//                                @Override
//                                public void onFailure(@NotNull Call call, @NotNull IOException e) {
//                                    Logger.e("Post请求(键值对)异步响应failure==" + e.getMessage());
//                                }
//
//                                @Override
//                                public void onResponse(@NotNull Call call, @NotNull okhttp3.Response response) throws IOException {
//                                    String result = response.body().string();
//                                    Logger.e("Post请求(键值对)异步响应Success==" + result);
//                                }
//                            });} catch (Exception e) {Logger.e("请求IOException==" + e.toString());}}}).start();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/813702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssm046人事管理信息系统+jsp

人事管理信息系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本人事管理信息系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短…

软考高级架构师:存储管理-页式存储真题解析

背景知识 题目 进程P有8个页面&#xff0c;页号分别为0&#xff5e;7&#xff0c;页面大小为4K &#xff0c;假设系统给进程P分配了4个存储块&#xff0c;进程P的页面变换表如下所示。表中状态位等于1和0分别表示页面在内存和不在内存。若进程P要访问的逻辑地址为十六进制 514…

QThread的学习

锁住该线程直到下面的情况之一出现&#xff1a; (1)和该线程连接的对象已经执行完成&#xff08;例如&#xff1a;当它从run()中返回时&#xff09; 如果该线程已经结束&#xff0c;该函数将返回true。 如果该线程还没有开始&#xff0c;它也返回true。 (2)time毫秒已经过去。如…

嵌入式面试的中的一些潜规则

潜规则1:面试的本质不是考试,而是告诉面试官你会做什么 经验不够的小伙伴特别容易犯的一个错误,不清楚面试官到底想问什么,其实整个面试中面试官并没有想难倒你的意思,只是想通过提问的方式来知道你会什么。 比如stm32单片机的启动过程是怎样的? 没入门的说从main函数…

Windows系统LibRadtran安装

Windows系统LibRadtran安装 1.简介1.1官网下载1.2依赖环境1.3 Cygwin64 介绍及安装 2.安装2.1安装依赖的环境2.2编译 3.可能遇到的错误3.1 错误13.2 错误2 4.使用教程 1.简介 LibRadtran&#xff08;Library for Radiative Transfer&#xff09;是一个用于计算太阳和热辐射在大…

单列模式1.0

单列模式 单例模式能保证某个类在程序中只存在唯⼀⼀份实例, ⽽不会创建出多个实例 1.饿汉模式 只要程序一启动就会立即创建出一个对象 class Signleton{private static Signleton instancenew Signleton();//防止在以后的代码中再创建对象&#xff0c;我们将构造方法private,…

【MIT6.S081】Lab3: page tables(详细解答版)

实验内容网址&#xff1a;https://xv6.dgs.zone/labs/requirements/lab3.html 本实验的代码分支&#xff1a;https://gitee.com/dragonlalala/xv6-labs-2020/tree/pgtbl2/ Print a page table 关键点&#xff1a;递归、三级页表 思路&#xff1a; 用上图来解释三级页表的原理最…

【windows 】taskkill命令

在Windows操作系统中&#xff0c;并没有直接称为“kill”的命令来终止进程&#xff0c;但是你可以使用“taskkill”命令或者通过任务管理器来实现类似的功能。 “taskkill”是一个强大的命令行工具&#xff0c;可以用来终止一个或多个任务或进程。以下是一些常用的“taskkill”…

智能电网将科技拓展至工厂之外的领域

【摘要/前言】 物联网已然颠覆我们日常生活的许多层面。在家居方面&#xff0c;家电变成连网设备&#xff0c;不仅让我们能控制灯光与上网购物&#xff0c;甚至在出门时提供安全功能。在工业领域&#xff0c;智能工厂改变产品制造的方式。工业物联网(IIoT)不仅让制造商更加敏捷…

Spring Boot 学习(5)——开发流程:快速入门

花了几天的时间&#xff0c;整出个 “hello spring boot”&#xff0c;并且把它从 2 搞到了 3。 纸上得来终觉浅&#xff01;自己实践出真知&#xff01;现在再回头来囫囵一遍&#xff0c;加深下印象。回想下从前自觉某一编程语言大都如此&#xff0c;先找到简单示例照着画一遍…

【vue3-pbstar-books】大学生前端期末作业(vue3、element-plus、ts、pinia、vite、json-server)

一、项目要求 二、项目介绍 vue3-pbstar-books是一个图书主题的pc端网站&#xff0c;该项目有首页、全部书籍页、书籍分类页、书籍详情页和关于页五个页面。该方案结合了 Vue3、Element-Plus、TypeScript、Pinia 和 Vite 等先进技术&#xff0c;实现高效的页面布局、状态管理和…

Spring之AOP的详细讲解

目录 一.SpringAOP是什么&#xff1f; 1.1理论知识点 1.2简单的AOP例子 二.SpringAOP的核心概念 2.1切点(Pointcut) 2.2通知&#xff08;Advice&#xff09; 2.3切⾯(Aspect) 2.4通知类型 2.5切⾯优先级 Order 2.6切点表达式 2.6.1 execution表达式 2.6.2annotati…

天地人和•大道不孤——卢禹舜中国画作品展在重庆美术馆隆重开幕

2024年4月12日&#xff0c;由中国国家画院、重庆市文化和旅游发展委员会主办&#xff0c;重庆美术馆&#xff08;重庆画院、重庆国画院&#xff09;、北京八荒锦绣美术馆、中国国际文化交流基金会卢禹舜艺术基金承办的“天地人和•大道不孤——卢禹舜中国画作品展”开幕式在重庆…

jmeter实验 模拟:从CSV数据到加密请求到解密返回数据再到跨越线程组访问解密后的数据

注意,本实验所说的加密只是模拟加密解密,您需要届时写自己的加解密算法或者引用含有加密算法的相关jar包才行. 思路: 线程组1: 1.从CSV文件读取原始数据 2.将读取到的数据用BeanShell预习处理器进行加密 3.HTTP提取器使用加密后的数据发起请求 4.使用BeanShell后置处理器…

底层文件操作的各种函数(二)------printf,fprintf,sprintf,scanf,fscanf,sscanf的对比以及文件缓冲区

偷得几日清闲&#xff0c;又因一瞬之间对蹉跎时间的愧疚&#xff0c;由此而来到CSDN这个高手云集和新手求学的平台来也写上那么一篇博客。虽然自己的博客那么久不温不热&#xff0c;但坚持写作&#xff0c;巩固自己就好。今天要讲的是续接上一篇文章的补充与继续吧。上期文章&a…

MQ:延迟队列

6.1场景&#xff1a; 1.定时发布文章 2.秒杀之后&#xff0c;给30分钟时间进行支付&#xff0c;如果30分钟后&#xff0c;没有支付&#xff0c;订单取消。 3.预约餐厅&#xff0c;提前半个小时发短信通知用户。 A -> 13:00 17:00 16:30 延迟时间&#xff1a; 7*30 * 60 *…

GB/T 28181标准中的错误码,国标28181中可能出现的SIP协议相关的错误码及其含义

目录 一、GB/T 28181标准介绍 &#xff08;一&#xff09;概述 &#xff08;二&#xff09;关键内容和特点 1. 系统架构&#xff1a; 2. 设备接入&#xff1a; 3. 网络通信&#xff1a; 4. 业务功能&#xff1a; 5. 安全保护&#xff1a; 6. 平台管理&#xff1a; &a…

【C语言】字符串函数和内存函数及其模拟实现

文章目录 前言 一、常见字符串库函数1.strlen函数2.长度不受限制的字符串函数2.1 strcpy2.2 strcat2.3 strcmp 3.长度受限制的字符串函数3.1 strncpy3.2 strncat3.3 strncmp 二、字符串查找函数strstrstrtok 三、strerror函数四、内存操作函数1.memcpy2.memmove3.memcmp 五、字…

力扣刷题 二叉树层序遍历相关题目II

NO.116 填充每个节点的下一个右侧节点指针 给定一个 完美二叉树 &#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树定义如下&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针&#xff0c;…

iOS开发如何更改xcode中的Apple ID

在Xcode中更改Apple ID是一项常见的任务&#xff0c;尤其是当你需要切换到另一个开发者账号或者团队时。下面是一个简单的步骤指南&#xff0c;帮助你更改Xcode中的Apple ID&#xff1a; 步骤一&#xff1a;退出当前的Apple ID 1.打开Xcode应用程序。 2.在菜单栏中&#xff0c;…