Android Studio OkHttp的使用
OkHttp的使用
总结一下,最近的学习OkHttp的过程中遇到的一列问题。
首先,要使用这个OkHttp之前需要添加OkHttp库的依赖。编辑app/build.gradle文件,在dependencies闭包中添加如下内容:
dependencies{
implementation ‘com.squareup.okhttp3:okhttp:4.1.0’
}
okhttp版本视实际情况选择
发送GET请求
// kotlin
//首先,需要创建一个OkHttpClient实例
val client = OkHttpClient()//创建一个Request对象,url为请求的链接,下面不做解释,括号中的url根据实际填入http连接
//例如,val url = "https://www.baidu.com/",以下同理,url为String类型
val request = Request.Builder().url(url).build()
//调用OkHttpClient的newCall()方法来创建一个Call对象,
//并调用它的execute()方法来发送请求并获取服务器返回的数据
val response = client.newCall(request).execute()
//再用如下写法得到返回的具体内容
val responseData = response.body?.string()
由于网上较多的代码还是用Java的,所以我写的项目也是用了Java,这就麻烦了,在post请求中体现最深。由于kotlin的语法是不用声明类型的,挺多变量我都不知道是什么类型。此外,kotlin运用了大量语法糖,导致语法上和Java差别还是很明显的。
// java
//首先,需要创建一个OkHttpClient实例
OkHttpClient client = new OkHttpClient();
//创建一个Request对象
Request request = new Request.Builder().url(url).build();
//调用OkHttpClient的newCall()方法来创建一个Call对象,
Response response = client.newCall(request).execute();
//再用如下写法得到返回的具体内容,注意这里和kotlin是有区别的,java的在.string()前加?号会报错
String responseData = response.body().string();
发送POST请求
post请求会比get请求复杂一点。
// kotlin
//首先需要构建一个Request Body对象来存放待提交参数,key,value根据实际填入
val requestBody = FormBody.Builder().add("key",value).build()
//创建一个OkHttpClient实例
val client = OkHttpClient()//创建一个Request对象
val request = Request.Builder().url(url).post(requestBody).build()
//调用OkHttpClient的newCall()方法来创建一个Call对象,
//并调用它的execute()方法来发送请求并获取服务器返回的数据
val response = client.newCall(request).execute()
//再用如下写法得到返回的具体内容
val responseData = response.body?.string()
// java
//首先需要构建一个FormBody.Builder对象来存放待提交参数,
FormBody.Builder builder = new FormBody.Builder();
builder.add("key",value);
//创建一个OkHttpClient实例
OkHttpClient client = new OkHttpClient();//创建一个Request对象
Request request = new Request.Builder().url(url).post(builder.build()).build();
//调用OkHttpClient的newCall()方法来创建一个Call对象,
//并调用它的execute()方法来发送请求并获取服务器返回的数据
Response response = client.newCall(request).execute();
//再用如下写法得到返回的具体内容
String responseData = response.body().string();
java发送post请求网上有的用new FormEncodingBuilder()创建请求表单RequestBody对象,这种写法已经被弃,我也被坑了很久才找到新的写法
此外,response.body().string()不要写成response.body().toString(), response.body().string()是将对象包含的内容转化为字符串,response.body().toString()是将对象直接转化为字符串
到这里,我以为终于可以使用了。结果,一直抛出异常,上网查了后才发现
在Android 4.0以上,网络连接方法execute()不能放在主线程上,不然就抛异常android.os.NetworkOnMainThreadExceptio,但是4.0下版本可以,不会报错。所以记得发起请求时要另外开线程
Android Studio OkHttp的使用相关推荐
- android studio islibrary,通过AndroidStudio发布Android Library到Jcenter[超详细]
这篇文章很长 如果已经对jcenter,maven有了一些概念,可以直接看我的另外一篇精简文章: 快速发布Abdroid Library到JCenter[精简] 开始之前先明白几个概念 maven M ...
- Android Studio 分析器详解
Android Profiler分为三大模块: cpu.内存 .网络.基本的使用在上一篇文章有讲到.这里详细说一下. 一. CPU分析器CPU Profiler CPU分析器可帮助您实时检查应用程序 ...
- android studio gradle 学习,学习Android Studio里的Gradle
一直听说Gradle很强大,只是偶尔用Android Studio创建Demo的时候看到他一次,今天抽个时间完整记录一下. 1.gradle位置 Android Studio项目创建好之后,默认有3个 ...
- 利用Android Studio快速搭建App
大家好,我是烤鸭: 给大家分享一个简单的用Android Studio快速搭建app 工具: Android Studio 64位 专业版 插件: Datepicker Timepicker okht ...
- android studio json插件_热门Android Studio 插件,这里是Top 20
Android Studio是Google基于IntelliJ开发的一款功能强大的开发工具,它具有构建出色Android应用所需要的一切.借助基于IntelliJ IDEA的强大的功能,插件非常丰富. ...
- android studio 引入httpclient,HttpClient不会导入Android Studio
我有一个用Android Studio编写的简单类: package com.mysite.myapp; import org.apache.http.client.HttpClient; publi ...
- android o 编译及运行,【转】实践最有效的提高Android Studio运行、编译速度方案
原文:https://blog.csdn.net/xwh_1230/article/details/60961723 实践最有效的提高Android Studio运行.编译速度方案 最有效提升Andr ...
- 带你彻底明白 Android Studio 打包混淆
前言 在使用Android Studio混淆打包时,该IDE自身集成了Java语言的ProGuard作为压缩,优化和混淆工具,配合Gradle构建工具使用很简单.只需要在工程应用目录的gradle文件 ...
- 用Gradle打包出jar文件 前面我们说过,在Android Studio里面使用Gradle来打包应用程序,一般都是build出来一个apk文件。但是有的同学是做实现层的开发,不直接做View层
用Gradle打包出jar文件 前面我们说过,在Android Studio里面使用Gradle来打包应用程序,一般都是build出来一个apk文件.但是有的同学是做实现层的开发,不直接做View层的 ...
最新文章
- HDU 1816, POJ 2723 Get Luffy Out(2-sat)
- 一个简单的例子看java线程机制
- mysql generator 命令_MyBatis Generator速查手册
- matlab txt写入excel,怎么把matlab的GUI文本编辑器中的数据存入EXCEl
- 计算机网络基础2017年继续教育,2017临沂继续教育《计算机网络基础》试题及答案...
- Java序列化简单例子
- 【图论】Tree之最小方差树(bzoj 3754)
- linux 自带 mysql,linux下安装mysql
- 云原生应用 Kubernetes 监控与弹性实践
- HTTP服务器恢复文件头,浅谈“Web服务器解析漏洞”
- php apc缓存以及与redis的对比
- zabbix监控搭建以及客户端安装
- 【疑点】当子元素全部浮动时,怎么解决父元素塌陷的问题?
- kindeditor自定义插件插入视频代码
- 用SecureCRSecurePortable查看动态日志
- 聊一聊Cookie(结合自己的学习方法分享一篇维基百科和一篇segmentfault(思否)好文)...
- 软件项目的全生命周期
- 文科生也能学会的Excel VBA 宏编程入门
- 00004 死亡阴影.0001:配置文件的Unity包与修改
- 于NXP芯片第一次无法进入CAN中断的问题
热门文章
- 不同php怎么传递参数,php – 将所有参数传递给另一个函数
- java web json_java web中对json的使用详解
- 华为鸿蒙测试结果,华为鸿蒙OS系统测试结果相继出炉!果然没让花粉们久等:最好的体验...
- hive 集成oracle,hive集成kerberos问题1
- 【Python】身体质量指数BMI
- VTK:多块数据集用法实战
- VTK:颜色边缘用法实战
- boost::hana::adjust用法的测试程序
- boost::log::make_exception_handler用法的测试程序
- boost::geometry::dot_product用法的测试程序