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的使用相关推荐

  1. android studio islibrary,通过AndroidStudio发布Android Library到Jcenter[超详细]

    这篇文章很长 如果已经对jcenter,maven有了一些概念,可以直接看我的另外一篇精简文章: 快速发布Abdroid Library到JCenter[精简] 开始之前先明白几个概念 maven M ...

  2. Android Studio 分析器详解

    Android  Profiler分为三大模块: cpu.内存 .网络.基本的使用在上一篇文章有讲到.这里详细说一下. 一. CPU分析器CPU Profiler CPU分析器可帮助您实时检查应用程序 ...

  3. android studio gradle 学习,学习Android Studio里的Gradle

    一直听说Gradle很强大,只是偶尔用Android Studio创建Demo的时候看到他一次,今天抽个时间完整记录一下. 1.gradle位置 Android Studio项目创建好之后,默认有3个 ...

  4. 利用Android Studio快速搭建App

    大家好,我是烤鸭: 给大家分享一个简单的用Android Studio快速搭建app 工具: Android Studio 64位 专业版 插件: Datepicker Timepicker okht ...

  5. android studio json插件_热门Android Studio 插件,这里是Top 20

    Android Studio是Google基于IntelliJ开发的一款功能强大的开发工具,它具有构建出色Android应用所需要的一切.借助基于IntelliJ IDEA的强大的功能,插件非常丰富. ...

  6. android studio 引入httpclient,HttpClient不会导入Android Studio

    我有一个用Android Studio编写的简单类: package com.mysite.myapp; import org.apache.http.client.HttpClient; publi ...

  7. android o 编译及运行,【转】实践最有效的提高Android Studio运行、编译速度方案

    原文:https://blog.csdn.net/xwh_1230/article/details/60961723 实践最有效的提高Android Studio运行.编译速度方案 最有效提升Andr ...

  8. 带你彻底明白 Android Studio 打包混淆

    前言 在使用Android Studio混淆打包时,该IDE自身集成了Java语言的ProGuard作为压缩,优化和混淆工具,配合Gradle构建工具使用很简单.只需要在工程应用目录的gradle文件 ...

  9. 用Gradle打包出jar文件 前面我们说过,在Android Studio里面使用Gradle来打包应用程序,一般都是build出来一个apk文件。但是有的同学是做实现层的开发,不直接做View层

    用Gradle打包出jar文件 前面我们说过,在Android Studio里面使用Gradle来打包应用程序,一般都是build出来一个apk文件.但是有的同学是做实现层的开发,不直接做View层的 ...

最新文章

  1. HDU 1816, POJ 2723 Get Luffy Out(2-sat)
  2. 一个简单的例子看java线程机制
  3. mysql generator 命令_MyBatis Generator速查手册
  4. matlab txt写入excel,怎么把matlab的GUI文本编辑器中的数据存入EXCEl
  5. 计算机网络基础2017年继续教育,2017临沂继续教育《计算机网络基础》试题及答案...
  6. Java序列化简单例子
  7. 【图论】Tree之最小方差树(bzoj 3754)
  8. linux 自带 mysql,linux下安装mysql
  9. 云原生应用 Kubernetes 监控与弹性实践
  10. HTTP服务器恢复文件头,浅谈“Web服务器解析漏洞”
  11. php apc缓存以及与redis的对比
  12. zabbix监控搭建以及客户端安装
  13. 【疑点】当子元素全部浮动时,怎么解决父元素塌陷的问题?
  14. kindeditor自定义插件插入视频代码
  15. 用SecureCRSecurePortable查看动态日志
  16. 聊一聊Cookie(结合自己的学习方法分享一篇维基百科和一篇segmentfault(思否)好文)...
  17. 软件项目的全生命周期
  18. 文科生也能学会的Excel VBA 宏编程入门
  19. 00004 死亡阴影.0001:配置文件的Unity包与修改
  20. 于NXP芯片第一次无法进入CAN中断的问题

热门文章

  1. 不同php怎么传递参数,php – 将所有参数传递给另一个函数
  2. java web json_java web中对json的使用详解
  3. 华为鸿蒙测试结果,华为鸿蒙OS系统测试结果相继出炉!果然没让花粉们久等:最好的体验...
  4. hive 集成oracle,hive集成kerberos问题1
  5. 【Python】身体质量指数BMI
  6. VTK:多块数据集用法实战
  7. VTK:颜色边缘用法实战
  8. boost::hana::adjust用法的测试程序
  9. boost::log::make_exception_handler用法的测试程序
  10. boost::geometry::dot_product用法的测试程序