当前位置: 首页 > news >正文

网站说建设中开平市建设工程站网站

网站说建设中,开平市建设工程站网站,dede古典网站模板,大连做网站建设Retrofit的使用 设置权限与添加依赖 定义请求接口通过创建一个retrofit生成一个接口的实现类(动态代理)调用接口请求数据 设置权限与添加依赖 权限#xff1a;首先确保在AndroidManifest.xml中请求了网络权限 #xff1a; uses-permission android:nameandroid…Retrofit的使用 设置权限与添加依赖 定义请求接口通过创建一个retrofit生成一个接口的实现类(动态代理)调用接口请求数据 设置权限与添加依赖 权限首先确保在AndroidManifest.xml中请求了网络权限 uses-permission android:nameandroid.permission.INTERNET / 2Studio用户,在app/build.gradle文件中添加如下代码 dependencies {compilecom.squareup.retrofit2:retrofit:2.0.2compile com.squareup.retrofit2:converter-gson:2.0.0-beta3 } 定义请求接口 public interface GankioService {GET(data/福利/10/{page})CallGirlData getGirls(Path(page) int page);GET(data/Android/10/{page})CallAndroidData getAndroidData(Path(page) int page); } 请求的URL可以在函数中使用替换块和参数进行动态更新替换块是{ and }包围的字母数字组成的字符串相应的参数必须使用相同的字符串被Path进行注释 然后创建一个retrofit public static GankioService buildGankioService() {if (mGankioService null) {Retrofit retfGank new Retrofit.Builder().baseUrl(http://gank.io/api/).addConverterFactory(GsonConverterFactory.create()).build();mGankioService retfGank.create(GankioService.class);}return mGankioService;} retfGank.create(GankioService.class)用到了动态代理 大家一看就发现了 create方法返回了一个动态代理对象那么动态代理是什么呢 —在运行时 动态代理类 实现了一个或者一组接口目的是其中任何一个接口的实例的方法调用将会被指派到统一的另一个接口的方法中。 InvocationHandler 中覆写的 invoke() 方法在进行原本的方法调用之前或者之后可以做点事情。 所以当我们调用 httpStores.getUser(hashMap);的时候其实是走了动态代理的invoke方法在这里Retrofit巧妙的理由注解把接口转换成了一个HTTP请求 调用接口请求数据 private void loadFromInternet(int page) {start page;final CallGirlData girlDataCall mService.getGirls(page);girlDataCall.enqueue(new CallbackGirlData() {Overridepublic void onResponse(CallGirlData call, ResponseGirlData response) {mGirlData response.body();ListGirl newGirls mGirlData.getGirls();// check if newGirls should be added into local girlsif (checkShouldAdded(newGirls)){addGirlsToDB(newGirls);}else{shouldLoadFromInternet false;}mView.showMore(newGirls);mView.finishRefresh();}Overridepublic void onFailure(CallGirlData call, Throwable t) {mView.finishRefresh();mView.showSnackBar();}});} 其中GirlData是由接口返回的json数据格式决定的 public class GirlData {/*** error : false* results : [{_id:56eb5db867765933d9b0a8fc,_ns:ganhuo,createdAt:2016-03-18T09:45:28.259Z,desc:3.18,publishedAt:2016-03-18T12:18:39.928Z,source:chrome,type:福利,url:http://ww1.sinaimg.cn/large/7a8aed7bjw1f20ruz456sj20go0p0wi3.jpg,used:true,who:张涵宇},{_id:56e8d0bb67765933d8be90be,_ns:ganhuo,createdAt:2016-03-16T11:19:23.692Z,desc:3.16,publishedAt:2016-03-17T11:14:16.306Z,source:chrome,type:福利,url:http://ww4.sinaimg.cn/large/7a8aed7bjw1f1yjc38i9oj20hs0qoq6k.jpg,used:true,who:张涵宇},{_id:56e8ce3967765933d8be90bd,_ns:ganhuo,createdAt:2016-03-16T11:08:41.957Z,desc:3.16,publishedAt:2016-03-16T11:24:01.505Z,source:chrome,type:福利,url:http://ww3.sinaimg.cn/large/610dc034gw1f1yj0vc3ntj20e60jc0ua.jpg,used:true,who:代码家},{_id:56e764116776592d80511280,_ns:ganhuo,createdAt:2016-03-15T09:23:29.580Z,desc:3.15,publishedAt:2016-03-15T11:45:57.350Z,source:chrome,type:福利,url:http://ww4.sinaimg.cn/large/7a8aed7bjw1f1xad7meu2j20dw0ku0vj.jpg,used:true,who:张涵宇},{_id:56e619a46776591744cf05c0,_ns:ganhuo,createdAt:2016-03-14T09:53:40.126Z,desc:3.14,publishedAt:2016-03-14T11:55:19.66Z,source:chrome,type:福利,url:http://ww1.sinaimg.cn/large/7a8aed7bjw1f1w5m7c9knj20go0p0ae4.jpg,used:true,who:张涵宇},{_id:56e220ca67765966681b3a23,_ns:ganhuo,createdAt:2016-03-11T09:35:06.879Z,desc:3.11--一周年快乐,publishedAt:2016-03-11T12:37:20.4Z,source:chrome,type:福利,url:http://ww4.sinaimg.cn/large/7a8aed7bjw1f1so7l2u60j20zk1cy7g9.jpg,used:true,who:张涵宇},{_id:56e0f0e86776596669cc2511,_ns:ganhuo,createdAt:2016-03-10T11:58:32.298Z,desc:3.10,publishedAt:2016-03-10T12:54:31.68Z,source:chrome,type:福利,url:http://ww4.sinaimg.cn/large/7a8aed7bjw1f1rmqzruylj20hs0qon14.jpg,used:true,who:张涵宇},{_id:56df891167765947765e2ad1,_ns:ganhuo,createdAt:2016-03-09T10:23:13.778Z,desc:3.9,publishedAt:2016-03-09T12:06:26.401Z,source:chrome,type:福利,url:http://ww2.sinaimg.cn/large/7a8aed7bjw1f1qed6rs61j20ss0zkgrt.jpg,used:true,who:张涵宇},{_id:56de2b1b6776592b6192bf46,_ns:ganhuo,createdAt:2016-03-08T09:30:03.578Z,desc:3.8,publishedAt:2016-03-08T12:55:59.161Z,source:chrome,type:福利,url:http://ww3.sinaimg.cn/large/7a8aed7bjw1f1p77v97xpj20k00zkgpw.jpg,used:true,who:张涵宇},{_id:56dd06b56776592b6246e979,_ns:ganhuo,createdAt:2016-03-07T12:42:29.664Z,desc:3.7,publishedAt:2016-03-07T12:49:24.470Z,source:chrome,type:福利,url:http://ww1.sinaimg.cn/large/7a8aed7bjw1f1o75j517xj20u018iqnf.jpg,used:true,who:张涵宇}]*/private boolean error;SerializedName(results)private ListGirl girls;public boolean isError() {return error;}public void setError(boolean error) {this.error error;}public ListGirl getGirls() {return girls;}public void setGirls(ListGirl girls) {this.girls girls;}} 是不是很简单而且很优雅 当然Retrofit的内部实现更优雅使用了很多设计模式这里推荐一位大神的文章 Retrofit分析-经典设计模式案例 - 简书 下面在说一下Okhttp的拦截器Interceptor 这真的是一个用起来非常爽的东西实现起来也非常简单 上代码 public class OkhttpInterceptor implements Interceptor { Override public Response intercept(Interceptor.Chain chain) throws IOException { //取到当前请求的Requset Request oldRequest chain.request(); //取到请求的URL 对你的URL进行修改比如拼接一个UID什么的 //也可以使用addQueryParameter拼接参数 String url oldRequest.url().toString()?uid; Request newRequest oldRequest.newBuilder() .method(oldRequest.method(), oldRequest.body()) .url(url) .build(); return chain.proceed(newRequest); } } 当然你也可以增加请求参数 HttpUrl.Builder urlBuilder oldRequest.url()newBuilder() .scheme(oldRequest.url().scheme()) .addQueryParameter(key, value) 只需要把url里的参数改为urlBuilder就行了 当然具体的业务需求也会遇到一些问题比如当我们的后台用的是https的时候需要用到自签名证书而OKhttp3已经没有了setCertificates设置自签名证书时怎么办没关系我们还有万能的反射呢下面我们就利用反射把https给过滤掉 SSLContext sc null; try { sc SSLContext.getInstance(SSL); sc.init(null, new TrustManager[]{new X509TrustManager() { Override public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException { } Override public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException { } Override public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } } }, new SecureRandom()); } catch (Exception e) { e.printStackTrace(); } HostnameVerifier hv1 new HostnameVerifier() { Override public boolean verify(String hostname, SSLSession session) { return true; }}; String workerClassName okhttp3.OkHttpClient; try { sClient new OkHttpClient.Builder().build(); Class workerClass Class.forName(workerClassName); Field hostnameVerifier workerClass.getDeclaredField(hostnameVerifier); hostnameVerifier.setAccessible(true); hostnameVerifier.set(sClient, hv1); Field sslSocketFactory workerClass.getDeclaredField(sslSocketFactory); sslSocketFactory.setAccessible(true); sslSocketFactory.set(sClient, sc.getSocketFactory()); } catch (Exception e) { e.printStackTrace(); } 这个反射只是用在忽略https上现在国内主流还是http一般是用不上的拦截器的话要debug看看清楚你可以在http执行请求之前做一些操作比如加一些请求参数或者是判断什么的。 参考链接 30分钟上手最火android网络请求框架Retrofit - 简书 Retrofit2.0使用 - OPEN 开发经验库 快速Android开发系列网络篇之Retrofit - AngelDevil - 博客园 Retrofit分析-经典设计模式案例 - 简书 Retrofit 解析 JSON 数据 - 简书 Retrofit2.0 我在stackoverflow回答的关于Retrofit2.0的相关问题 使用RxJava与Retrofit2.0使用的实例Retrofit 2.0 RxJava Sample JW大神的文章 吴小龙Android Retrofit 2.0使用
http://www.pierceye.com/news/430859/

相关文章:

  • 网站建设佰首选金手指六门户网站 解决方案
  • 怎么可以创建网站十大管理培训课程
  • 网络安全管理系统佛山厂家推广优化
  • 网站建设 外包是什么意思微信小程序低代码开发
  • 网站底部信息用js写法莱芜雪野湖有什么好玩的
  • 青岛高品质网站制作优化快速排名教程
  • 地产项目网站长沙建个网站一般需要多少钱
  • 什么样的网站流量容易做社区网站建设
  • 网站的虚拟主机到期延吉建设局网站
  • 深圳seo网站优化公司wordpress页面权限插件
  • 手机制作购物网站农业 网站源码
  • 飞沐网站设计成都推广网站多少钱
  • 网站建设需要什么手续秦皇岛市房价
  • seo织梦网站建设步骤西宁网络公司电话
  • 河南省建设厅网站 吴浩石家庄做外贸网站建设
  • 免费网站发布怎么做的校园网站建设的参考文献
  • 网站空间管理平台腾讯会议多少钱一个月
  • 手机网站开发如何设置触摸功能的网页设计培训班
  • 淘宝客自己做网站中信建设有限责任公司 闫励
  • wordpress 分页不出来昆明网站快速优化排名
  • 玉泉路网站制作369网站建设中心
  • 服务器建设网站办一家建筑公司怎么样
  • 官网网站设计小程序免费制作流程
  • 宜昌哪有有做网站的wordpress如何添加页面子目录
  • 高端网站制作开发html写一个简单购物页面
  • 为什么百度搜索不到我的网站网站服务商排名
  • 深圳建设网站首页国土 住房与城乡建设部网站
  • wordpress拖拽式建站主题wordpress 类似软件
  • ps制作网站logo广西建设局网站
  • 专业网站建设公司排名wordpress上传媒体文件大小修改