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.hqwc.cn/news/624061.html

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

相关文章

Linux之 USB驱动框架-usb-skeleton.c usb驱动源码分析(3)

一、usb 驱动框架图 二、 usb 设备经典驱动&#xff1a;usb-skeleton.c 驱动 路径&#xff1a; drivers/usb/usb-skeleton.c USB骨架程序可以看做一个最简单的USB设备驱动的实例&#xff0c;其分析流程大致如下&#xff1a; static struct usb_driver skel_driver { …

hot100 -- 链表(中)

不要觉得力扣核心代码模式麻烦&#xff0c;它确实比不上ACM模式舒服&#xff0c;可以自己处理输入输出 只是你对 链表 和 return 的理解不到位 &#x1f442; ▶ 屿前世 (163.com) &#x1f442; ▶ see you tomorrow (163.com) 目录 &#x1f382;两数相加 &#x1f6a9;删…

使用阿里云试用Elasticsearch学习:5. 地理位置

我们拿着纸质地图漫步城市的日子一去不返了。得益于智能手机&#xff0c;我们现在总是可以知道 自己所处的准确位置&#xff0c;也预料到网站会使用这些信息。我想知道从当前位置步行 5 分钟内可到的那些餐馆&#xff0c;对伦敦更大范围内的其他餐馆并不感兴趣。 但地理位置功…

【CAN】采样点介绍及测试方法

文章目录 1 什么是采样点2 为什么需要采样点3 采样点的计算公式4 VH6501测试原理和方法4.1 VH6501测试采样点原理4.2 VH6501测试方法 >>返回总目录<< 1 什么是采样点 采样点是节点判断信号逻辑电平的位置&#xff0c;是CAN控制器读取总线电平&#xff0c;并解释各…

Big Data and Cognitive Computing (IF=3.7) 计算机/大数据/人工智能期刊投稿

Special Issue: Artificial Cognitive Systems for Computer Vision 欢迎计算机/大数据/人工智能/计算机视觉相关工作的投稿&#xff01; 影响因子3.7&#xff0c;截止时间2024年12月31日 投稿咨询&#xff1a;lqyan18fudan.edu.cn 投稿网址&#xff1a;https://www.mdpi.com/j…

【多模态检索】Coarse-to-Fine Visual Representation

快手文本视频多模态检索论文 论文&#xff1a;Towards Efficient and Effective Text-to-Video Retrieval with Coarse-to-Fine Visual Representation Learning 链接&#xff1a;https://arxiv.org/abs/2401.00701 摘要 近些年&#xff0c;基于CLIP的text-to-video检索方法…

二维旋转变换

求点 P(x1, y1) 绕点 Q(x2, y2) 逆时针旋转 θ 得到的点的坐标 先看绕原点旋转的情况&#xff1a; 如图所示点 v 绕 原点旋转 θ 角&#xff0c;得到点v’&#xff0c;假设 v点的坐标是(x, y) &#xff0c;那么可以推导得到 v’点的坐标&#xff08;x’, y’)&#xff1a; { x …

JVM主要知识点详解

目录 1. 性能监控和调优 1.1 调优相关参数 1.2 内存泄漏排查 1.3 cpu飙⾼ 2. 内存与垃圾回收 2.1JVM的组成&#xff08;面试题&#xff09; 2.2 Java虚拟机栈的组成 2.3 本地方法栈 2.4 堆 2.5 方法区&#xff08;抽象概念&#xff09; 2.5.1 方法区和永久代以及元空…

【终于明白为啥有团队禁止使用lombok】

终于明白为啥有团队禁止使用lombok 背景我们的问题难点如何解决是什么东西&#xff1f;最后 背景 团队内部&#xff0c;idea版本不一样&#xff0c;有2021&#xff0c;有2022&#xff0c;有2023。 项目pom中lombok版本过低。 我们的问题 有用较新版本idea的同学&#xff0c;…

计算机组成原理【CO】Ch2 数据的表示和应用

文章目录 大纲2.1 数制与编码2.2 运算方法和运算电路2.3 浮点数的表示和运算 【※】带标志加法器OFSFZFCF计算机怎么区分有符号数无符号数? 【※】存储排列和数据类型转换数据类型大小数据类型转换 进位计数制进制转换2的次幂 各种码的基本特性无符号整数的表示和运算带符号整…

【电控笔记6.2】拉式转换与转移函数

概要 laplace&#xff1a;单输入单输出&#xff0c;线性系统 laplace 传递函数 总结

使用Python模仿文件行为

在Python中&#xff0c;你可以通过文件操作函数&#xff08;如open()函数&#xff09;以及模拟输入输出流的库&#xff08;如io模块&#xff09;来模拟文件行为。下面是一些示例&#xff0c;展示了如何使用这些工具在Python中模拟文件行为。 1、问题背景 在编写一个脚本时&…