1、添加依赖 compile 'com.squareup.okhttp3:okhttp:3.4.2'
  project Structure-->dependencied/搜索okhttp.

compile 'com.squareup.okhttp3:okhttp:3.4.2'

2、添加权限
 <uses-permission android:name="android.permission.INTERNET"/>

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

  1. public class MainActivity extends AppCompatActivity {
  2.  
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. }
  8.  
  9. //基本请求默认GET请求
  10. public void net1(View v){
  11. //可以通过构造方法来使用。使用Builder模式可以设置一些属性
  12. // OkHttpClient client = new OkHttpClient();
  13. //缓存的请求的数据,json字符串,
  14. //Cache questCache = new Cache(new File("cache"),1024);
  15. OkHttpClient client = new OkHttpClient.Builder()
  16. //读取超时5s
  17. .readTimeout(5000, TimeUnit.MILLISECONDS)
  18. //自带缓存,缓存可做可不做,做了就是让刷新的时候方便些,不会重复去请求同一个url多次
  19. //.cache(questCache)
  20. .build();
  21.  
  22. //默认GET请求
  23. Request request = new Request.Builder()
  24. .url("https://www.baidu.com")
  25. .build();
  26.  
  27. //call就是我们可以执行的请求类
  28. Call call = client.newCall(request);
  29.  
  30. // try {
  31. // //同步方法,程序运行到这里会等待,所以这里我们不用这个方法
  32. // Response execute = call.execute();
  33. // } catch (IOException e) {
  34. // e.printStackTrace();
  35. // }
  36.  
  37. //异步请求
  38. call.enqueue(new Callback() {
  39. @Override
  40. public void onFailure(Call call, IOException e) {
  41. Log.e("TAG","请求失败");
  42. }
  43.  
  44. @Override
  45. public void onResponse(Call call, Response response) throws IOException {
  46. //子线程
  47. Log.e("TAG",Thread.currentThread().getName()+"---结果:"+response.body().string());
  48. //修改UI使用 runOnUiThread();或者使用Handler发送更新UI消息给主线程
  49. }
  50. });
  51.  
  52. //取消
  53. // call.cancel();
  54. }
  55.  
  56. //POST请求
  57. public void net2(View v){
  58. OkHttpClient client = new OkHttpClient.Builder()
  59. .readTimeout(5000,TimeUnit.MILLISECONDS)
  60. .build();
  61.  
  62. //创建Form表单对象,可以add多个键值对
  63. RequestBody body = new FormBody.Builder()
  64. .add("showapi_appid","27306")
  65. .add("showapi_sign","150e9206e7f542bab4affe49d73cb920")
  66. .build();
  67.  
  68. Request request = new Request.Builder().url("http://route.showapi.com/578-6")
  69. .post(body)//添加参数
  70. .build();
  71.  
  72. Call call = client.newCall(request);
  73. call.enqueue(new Callback() {
  74. @Override
  75. public void onFailure(Call call, IOException e) {
  76. Log.e("TAG","请求失败");
  77. }
  78.  
  79. @Override
  80. public void onResponse(Call call, Response response) throws IOException {
  81. Log.e("TAG","---->"+response.toString());
  82. //子线程
  83. }
  84. });
  85.  
  86. }
  87.  
  88. //文件上传
  89. public void net3(View v){
  90. OkHttpClient client = new OkHttpClient.Builder()
  91. .readTimeout(5000,TimeUnit.MILLISECONDS)
  92. .build();
  93.  
  94. //添加多个文件
  95. RequestBody fileBody = MultipartBody.create(MediaType.parse("application/octet-stream"),new File("上传的文件地址"));
  96.  
  97. RequestBody body = new MultipartBody.Builder()
  98. //设置为表单类型
  99. .setType(MultipartBody.FORM)
  100. //添加表单键值
  101. .addFormDataPart("image头像字段名称","name文件名称",fileBody)
  102. .build();
  103.  
  104. Request request = new Request.Builder()
  105. .url("http://192.168.18.250")
  106. .post(body)
  107. .build();
  108.  
  109. Call call = client.newCall(request);
  110. call.enqueue(new Callback() {
  111. @Override
  112. public void onFailure(Call call, IOException e) {
  113.  
  114. }
  115.  
  116. @Override
  117. public void onResponse(Call call, Response response) throws IOException {
  118. //子线程
  119. }
  120. });
  121. }
  122. }

MainActivity.java

参考资料:

  1. http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0106/2275.html

Android网络框架---OkHttp3的更多相关文章

  1. Android 网络框架 OKHttp3

    概述 OKHttp是一个处理网络请求的框架,其优点有,支持http2,对一台机器的所有请求共享同一个socket. 内置连接池,支持连接复用,减少延迟.通过缓存避免重复的请求,请求失败时自动重试主机的 ...

  2. Android网络框架Volley(体验篇)

    Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...

  3. Android网络框架Volley(实战篇)

      之前讲了ym—— Android网络框架Volley(体验篇),大家应该了解了volley的使用,接下来我们要看看如何把volley使用到实战项目里面,我们先考虑下一些问题: 从上一篇来看 mQu ...

  4. Android网络框架-Volley实践 使用Volley打造自己定义ListView

    这篇文章翻译自Ravi Tamada博客中的Android Custom ListView with Image and Text using Volley 终于效果 这个ListView呈现了一些影 ...

  5. Android网络框架Volley

    Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...

  6. ym—— Android网络框架Volley(终极篇)

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103).谢谢支持! 没看使用过Volley的同学能够,先看看Android网络框架Volley(体验篇)和 ...

  7. Android 网络框架 Retrofit2

    概述 Retrofit是一个OkHttp网络请求框架的封装库,Retrofit通过注解配置网络参数,可以按照我们的规则去构造实际的HTTP请求,能够灵活设置URL.头部.请求体.返回值等,是目前最优雅 ...

  8. Android网络框架之Retrofit + RxJava + OkHttp 变化的时代

    1.什么是Retrofit框架? 它是Square公司开发的现在非常流行的网络框架,所以我们在导入它的包的时候都可以看到这个公司的名字,目前的版本是2. 特点: 性能好,处理快,使用简单,Retrof ...

  9. Android网络框架OkHttp之get请求(源码初识)

    概括 OkHttp现在很火呀.于是上个星期就一直在学习OkHttp框架,虽然说起来已经有点晚上手了,貌似是2013年就推出了.但是现在它版本更加稳定了呀.这不,说着说着,OkHttp3.3版本在这几天 ...

随机推荐

  1. Android界面布局学习总结

    参考文章: http://blog.csdn.net/shakespeare001/article/details/7843460 http://www.cnblogs.com/w-y-f/p/412 ...

  2. 使用Raphael 画图(三) 事件 (javascript)

    这章展示事件例子. 下图是官方API的事件: 例子: var butt1 = paper.set(); var a1 = paper.circle(24.833, 26.917, 26.667).at ...

  3. unix环境高级编程-读书笔记与习题解答-第一篇

    从这周开始逐渐的进入学习状态,每天晚上都会坚持写c程序,并且伴随对这本书的深入,希望能写出更高质量的读书笔记和程序. 本书的第一章,介绍了一些关于unix的基础知识,在这里我不想去讨论linux到底是 ...

  4. C# 当double数值较大且小数位过多时转化成字符串并保留小数位

    今天在C#中碰到了一个问题,需要将double转换成字符串显示,要求保留小数位. 在网上查询了一下相关的文章 具体如下: double temp=3.1415926; (F)Fixed point:s ...

  5. MySql拾遗

    1.“1130-Host is not allowed to connect to this MySQL server” 满世界的人都告诉你,到user表中把root + localhost的“loc ...

  6. GO:格式化代码

    http://www.ituring.com.cn/article/39380 Go 开发团队不想要 Go 语言像许多其它语言那样总是在为代码风格而引发无休止的争论,浪费大量宝贵的开发时间,因此他们制 ...

  7. 转:.NET 环境中使用RabbitMQ

    原文来自于:http://blog.jobbole.com/83819/ 原文出处: 寒江独钓   欢迎分享原创到伯乐头条 在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统 ...

  8. BZOJ 1048 分割矩阵

    Description 将一个a*b的数字矩阵进行如下分割:将原矩阵沿某一条直线分割成两个矩阵,再将生成的两个矩阵继续如此分割(当然也可以只分割其中的一个),这样分割了(n-1)次后,原矩阵被分割成了 ...

  9. linux在shell中获取时间

    linux在shell中获取时间 获得当天的日期 date +%Y-%m-%d 输出: 2011-07-28 将当前日期赋值给DATE变量DATE=$(date +%Y%m%d) 有时候我们需要使用今 ...

  10. Kernel PCA 原理和演示

    Kernel PCA 原理和演示 主成份(Principal Component Analysis)分析是降维(Dimension Reduction)的重要手段.每一个主成分都是数据在某一个方向上的 ...