贵州省遵义市建设局网站,如何在百度上发布自己的广告,超低价网站维护网站托管,高唐网站一、概述 Retrofit是Square公司开发的一个类型安全的Java和Android 的REST客户端库。来自官网的介绍#xff1a; A type-safe HTTP client for Android and JavaRest API是一种软件设计风格#xff0c;服务器作为资源存放地。客户端去请求GET,PUT, POST,DELETE资源。并且是无… 一、概述 Retrofit是Square公司开发的一个类型安全的Java和Android 的REST客户端库。来自官网的介绍 A type-safe HTTP client for Android and Java Rest API是一种软件设计风格服务器作为资源存放地。客户端去请求GET,PUT, POST,DELETE资源。并且是无状态的没有session的参与。关于REST的介绍可以参考维基百科 retrofit模型如下(来自如何使用Retrofit写一个Android的REST客户端的小教程) 1) POJO或模型实体类 : 从服务器获取的JSON数据将被填充到这种类的实例中。2) 接口 : 我们需要创建一个接口来管理像GET,POST...等请求的URL这是一个服务类。3) RestAdapter类 : 这是一个REST客户端(RestClient)类retrofit中默认用的是Gson来解析JSON数据你也可以设置自己的JSON解析器。 二、原理 在发起请求时整个框架主要通过Call来封装每一次的请求。调用同步方法时会使用应用线程来发送请求调用异步方法时会通过 OkHttp 的 Dispatcher 提供的线程来执行请求。 DispatcherDispatcher内部实现了懒加载无边界限制的线程池方式同时该线程池采用了SynchronousQueue这种阻塞队列。SynchronousQueue每个插入操作必须等待另一个线程的移除操作同样任何一个移除操作都等待另一个线程的插入操作。显然这是一种快速传递元素的方式也就是说在这种情况下元素总是以最快的方式从插入者生产者传递给移除者消费者这在多任务队列中是最快处理任务的方式。 二、使用 添加依赖gradle或导jar包 添加依赖在modul的build文件下的dependencies中添加 compile com.squareup.retrofit2:retrofit:2.0.2
compile com.squareup.retrofit2:converter-gson:2.0.2 点击Sync Now或导jar包点击下载retrofit-2.0.0-beta2.jar| Retrofit库converter-gson-2.0.0-beta2_.jar | Gson解析库gson-2.4.jar | Gson解析库okhttp-2.5.0.jar | Okhttp请求库okio-1.6.0.jar | Okhttp请求库说明Retrofit依赖于okhttp所以需要集成okhttpAPI返回的数据为JSON格式在此我使用的是Gson对返回数据解析 添加权限 由于是网络请求需要在manifest中添加网络请求的权限 uses-permission android:nameandroid.permission.INTERNET/ 创建实体类 这是使用Gson解析需要创建一个POJOJava对象。服务器返回的JSON数据不能在Java里直接使用所以我们需要用模型类来做转换。这里使用jsonschema2pojo需翻墙来创建POJO。得到JSON数据如下复制JSON字符串到输入框中填写报名、类名源代码类型选择JSON注解类型选择Gson点击Preview即可得到对应的POJO如下图点击preview得到对应的实体类。将其拷贝到自己的工程中即可。 import com.google.gson.annotations.SerializedName;Generated(org.jsonschema2pojo)可删除 POJO的转换推荐使用GsonFormat用法不就不说了自己去搜吧。简单易用 创建一个Retrofit 对象核心用法一 Retrofit retrofit new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create())//解析方法//这里建议- Base URL: 总是以/结尾- Url: 不要以/开头.baseUrl(http://www.wangyinews.com.cn/).build(); 接口申明核心用法二 public interface NewsService {/*** 根据newsid获取对应的资讯数据* 如果不需要转换成Json数据,可以用了ResponseBody;* param newsId* return call*/GET(News/{newsId})CallNews getNews(Path(newsId) String newsId);
} 若需要重新定义接口地址可以使用Url例 GETCallListCaigenActivitySubjectsBean getActivitySubjectsList(Url String url,QueryMap MapString, String map); 更多请求方法请参考Retrofit网络请求ServicePath、Query、QueryMap 创建访问API的请求核心用法三NewsService api retrofit.create(NewsService .class);
CallNews call service.getNews(123456); 同步调用(核心用法四) News news call.execute(); 异步调用核心用法五 call.enqueue(new CallbackNews(){ Override public void onResponse(ResponseNews response) { //成功返回数据后在这里处理使用response.body();获取得到的结果News news response.body();} Override public voidonFailure(Throwable t) { //请求失败在这里处理 } }); 取消请求核心用法六 call.cancel(); 完成以上步骤就可以实现一个简单的网络请求了。 Tips:当返回结果错误调用response.errorBody().string();可以得到String类型的请求结果但再次调用response.errorBody().string();得到的结果为。具体原因不明