首页 Android--第三方控件--okHttp

Android--第三方控件--okHttp

举报
开通vip

Android--第三方控件--okHttpAndroid--第三方控件--okHttp Android中有很多的第三方控件,其中OkHttp是一个很强大的用于网络加载的第三方框架,当然了,它的内部也是使用原生的代码封装好的。今天我们就来看一下OkHttp的简单用法: 说到网络请求,肯定就分get和post两种了,这里我们说一下get和post的简单实用: 首先我们需要先在我们的项目中引入OkHttp的依赖,在你的项目的gradle下面的dependencies下添加依赖: 1 compile 'com.squareup.okhttp3:okhttp...

Android--第三方控件--okHttp
Android--第三方控件--okHttp Android中有很多的第三方控件,其中OkHttp是一个很强大的用于网络加载的第三方框架,当然了,它的内部也是使用原生的代码封装好的。今天我们就来看一下OkHttp的简单用法: 说到网络请求,肯定就分get和post两种了,这里我们说一下get和post的简单实用: 首先我们需要先在我们的项目中引入OkHttp的依赖,在你的项目的gradle下面的dependencies下添加依赖: 1 compile 'com.squareup.okhttp3:okhttp:3.4.1' 然后同步项目,会自动下载OkHttp相关的依赖。或者也可以这样,选中此工作空间的设置: ----》选中你要添加依赖(要使用OkHttp)的项目,选择添加类库依赖 在搜索框中输入你想要下载的第三方框架,点搜索哪个按钮,选中想要下载的,点击OK,完成。 1. Get方式:我们先看一段代码: 1 private void httpget() { 2 //okhttpclient :okthttp主要类 3 OkHttpClient client=new OkHttpClient(); 4 /* 5 Request:请求服务端 6 Request.Builder(www.visa158.com):设计模式:将一个复杂的对象的构建与他的 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示分离,使得同样的构建过程可以创建不同的表示,他的每一个属性的设置都返回一个builder对象,也就是说可以一直使用.XX的形式为其设置属性 7 build:结束,返回Request对象 8 */ 9 Request request=new Request.Builder().url(path).build(); 10 //Call 将你的请求封装成任务 11 Call call=client.newCall(request); 12 //请求调度 13 call.enqueue(new Callback() { 14 //失败 15 @Override 16 public void onFailure(Call call, IOException e) { 17 18 } 19 //成功 20 @Override 21 public void onResponse(Call call, Response response) throws IOException { 22 //返回String 23 String json=response.body().string(); 24 Log.i("TAG","----->get"+json); 25 //返回byte[] 26 response.body().bytes(); 27 //返回流 28 response.body().byteStream(); 29 } 30 }); 31 } 如上所示,我们要使用OkHttp的时候,首先要先new一个OkHttpClient对象, OkHttpClient是其一个主要的类,Response对象用来构建我们需要额外传递的值(如head, method等)和一些其他需要设置的参数,而Call对象是用来封装任务并执行调度的。我们调用 call.enqueue()方法,将call加入调度队列,在enqueue()方法中我们通过匿名内部类的形式 实现这个CallBack接口,并实现其中的两个方法,onFailure()方法是请求网络失败的时候会 执行的方法,onResponse()是请求成功的时候会执行的方法。我们主要看onResponse()方 法,可以看到,我们在onResponse()方法中通过回传的Response对象得到我们想要的网络 请求的数据。通过response.body()方法我们能得到ResponseBody对象,在这个对象中我 们可以通过方法获得到字符串、字节数组和输入流。也就是说这个地方是支持大文件下载的。不 过也说明了onResponse()方法不是在主线程中执行的,同样的,onFailure()方法也是在子线 程中执行,只要我们调用了enqueue(),OkHttp会为我们开启一个子线程。我们可以通过使 用handler来实现UI更新。当然,我们也可以像这样通过call.excute()方法直接返回一个 Response()对象: 1 OkHttpClient client = new OkHttpClient(); 2 Request request = new Request.Builder().url(path).build(); 3 try { 4 Response res = client.newCall(request).execute(); 5 Log.d("tag", "onResponse: "+res.body().string()); 6 } catch (IOException e) { 7 e.printStackTrace(); 8 } 2. Post方式: 1 private void httppost() { 2 //okhttpclient :okthttp主要类 3 OkHttpClient client=new OkHttpClient(); 4 /* 5 RequestBody:请求体,携带参数去服务端访问 6 FormBody:设置表单参数,用它来设置要携带的参数 7 FormBody.Builder(www.hunanwang.net):设计模式:将一个复杂的 对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示 8 build:结束,返回一个RequestBody 9 */ 10 RequestBody body=new FormBody.Builder().add("name","xiaoming").add("age","18").build(); 11 //创建Request 12 Request request=new Request.Builder().url(path).post(body).build(); 13 //Call 将你的请求封装成任务 14 Call call=client.newCall(request); 15 //请求调度 16 call.enqueue(new Callback() { 17 //失败 18 @Override 19 public void onFailure(Call call, IOException e) { 20 21 } 22 //成功 23 @Override 24 public void onResponse(Call call, Response response) throws IOException { 25 String json= response.body().string(); 26 Log.i("TAG","----->post"+json); 27 28 response.body().byteStream(); 29 response.body().bytes(); 30 } 31 }); 32 } get方式请求如果熟悉了,post其实与它一样,只是在构建的时候需要多传递几个参数而已。 可以看到,我们在上面构建Request对象的时候先构建了一个RequestBody对象,有代码可 见,RequestBody对象也是一个Builder设计模式,设置完参数后不要忘了调用其build()方 法完成构建。在封装Request对象的时候有点不同: 1 Request request=new Request.Builder().url(path).post(body).build(); 可以看到我们在设置了其url属性后又调用了post,并将刚才构建的RequestBody()对象 传递进去。这说明我们使用的post方式。下面的请求调度方法与get相同,不再赘述。 可以看到,网络访问的代码还是不少的,如果每次网络访问我们都要写这么多的代码的话, 那可毁了,所以我们下面去封装一个工具类,这里以get方式为例: 1 package ggcomic.rabbit.lx.ggcomic.utils; 2 3 import java.io.IOException; 4 5 import okhttp3.Call; 6 import okhttp3.OkHttpClient; 7 import okhttp3.Request; 8 import okhttp3.Response; 9 10 /** 11 * OkHttp网络加载(单例模式) 12 * Created by Lx on 2016/9/12. 13 */ 14 public class OkHttpUtils { 15 public OkHttpUtils() { 16 } 17 18 public static OkHttpUtils okHttpUtils = new OkHttpUtils(); 19 20 public static OkHttpUtils getInstance() { 21 return okHttpUtils; 22 } 23 24 OkHttpClient client = new OkHttpClient(); 25 26 /** 27 * 官方 28 * 直接得到string字符串 29 * @param path 30 * @return 31 * @throws IOException 32 */ 33 public String run(String path) throws IOException { 34 Request request = new Request.Builder().url(path).build(); 35 //官方封装的方法,没有请求调度,在使用该工具类的时候要启动一个线程, 36 // 使用client.newCall(request).enqueue(new CallBack(){...}) 的时候不需要启动线程 37 Response response = client.newCall(request).execute(); 38 return response.body().string(); 39 } 40 41 /** 42 * 非官方 43 * 获得call实例 44 * @param path 45 * @return 46 */ 47 public Call getCallInstance(String path) { 48 Request request = new Request.Builder().url(path).build(); 49 Call call = client.newCall(request); 50 return call; 51 } 52 53 } 这里我们使用了单例模式的饿汉式写法。这里工具类的写法有两种,一种是官方的,一种是非官方的,看代码可以知道,官方封装的方法无法处理请求失败时的操作,因为它直接返回给我们一个Response对象,而非官方的是我自己的写法,这里返回一个Call对象,我们在代码中使用非官方的写法: 1 OkHttpUtils.getInstance().getCallInstance(String url).enqueue(new Callback() { 2 @Override 3 public void onFailure(Call call, IOException e) { 4 handler.post(new Runnable() { 5 @Override 6 public void run() { 7 //网络连接失败时的操作 8 } 9 }); 10 } 11 12 @Override 13 public void onResponse(Call call, Response response) throws IOException { 14 //网络连接成功时的操作 15 } 16 }); 我们先是调用getInstance()方法得到一个OkHttp实例,然后再调用其中的方法,在里面完成相应的操作即可。
本文档为【Android--第三方控件--okHttp】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_531654
暂无简介~
格式:doc
大小:49KB
软件:Word
页数:0
分类:互联网
上传时间:2018-08-21
浏览量:8