Retrofit2使用总结
来源:互联网 发布:电视软件下载 编辑:程序博客网 时间:2024/06/11 01:11
了解Retrofit2:
1)其本质上就是对okHttp的封装,使用面向接口的方式进行网络请求。
2)使用注解和动态代理,极大的简化网络请求的步骤。
3)默认使用OKHttp处理网络请求,默认使用Gson解析(可以自定义)
Retrofit2常用的注解接口:
@Post:表示为post请求方式
@Get:表示为get请求方式
@FormUrlEncoded:以表单的形式提交请求参数
@FieldMap:指定所有集合表单控件的名称,login (@FieldMap Map<String,String> map) 以map集合的形式提交表单数据
BaseUrl与@url的区别: BaseUrl最好以 / 结尾,而@url最好别以 / 开头
Retrofit2代码实现步骤
1)定义一个接口(主要作用是用注解的形式封装请求地址和请求参数),比如UserApi
2)实例化Retrofit
3)通过Retrofit实例,获取一个接口服务对象: create(UserApi.class)
4)通过接口服务对象ApiService,调用接口中的方法,获取call对象
5)Call对象执行请求(异步请求、同步请求)
1)其本质上就是对okHttp的封装,使用面向接口的方式进行网络请求。
2)使用注解和动态代理,极大的简化网络请求的步骤。
3)默认使用OKHttp处理网络请求,默认使用Gson解析(可以自定义)
Retrofit2常用的注解接口:
@Post:表示为post请求方式
@Get:表示为get请求方式
@FormUrlEncoded:以表单的形式提交请求参数
@FieldMap:指定所有集合表单控件的名称,login (@FieldMap Map<String,String> map) 以map集合的形式提交表单数据
BaseUrl与@url的区别: BaseUrl最好以 / 结尾,而@url最好别以 / 开头
Retrofit2代码实现步骤
1)定义一个接口(主要作用是用注解的形式封装请求地址和请求参数),比如UserApi
2)实例化Retrofit
3)通过Retrofit实例,获取一个接口服务对象: create(UserApi.class)
4)通过接口服务对象ApiService,调用接口中的方法,获取call对象
5)Call对象执行请求(异步请求、同步请求)
UaseApi: 接口的创建,主要用于封装一个模块中,多个请求接口,其中包含请求参数,请求方式,请求URL,请求方法名
添加依赖:
//添加依赖jackson依赖 compile 'com.squareup.retrofit2:converter-jackson:2.0.1' //添加retrofit2依赖 compile 'com.squareup.retrofit2:retrofit:2.0.1' //添加日志信息拦截依赖 compile 'com.squareup.okhttp3:logging-interceptor:3.7.0' //添加对rxJava的支持 compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1' compile 'io.reactivex:rxandroid:1.1.0' //ButterKnife 7.0.1对应sdk24 compile 'com.jakewharton:butterknife:8.5.1' apt 'com.jakewharton:butterknife-compiler:8.5.1'
案例:
Retrofit2的基本使用:
//获取一个Retrofit2对象 Retrofit Retrofit = new Retrofit.Builder() .baseUrl(UrlConstant.BASE_URL_TEST) .build(); //通过Retrofit实例,创建服务接口对象 ApiService apiService = Retrofit.create(ApiService.class); //通过接口服务对象,调用接口中的方法,获取call对象 Call<ResponseBody> call = apiService.getNetData(); //通过call对象执行网络请求(同步请求execute,异步请求enqueue) call.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { if (response.isSuccessful()) { ResponseBody body = response.body(); //获取json字符串 try { String result = body.string(); tv_content.setText(result); Log.i(TAG, result); } catch (IOException e) { e.printStackTrace(); } } } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { Log.i(TAG, "请求失败"); } });
1、Retrofit2设置Json转换器
为Retrofit2添加json转换器;
当创建一个Retrofit实例的时候可以为其添加一个Json转换器,这样就会自动将Json格式的响应体转换为所需要的Java对象。
GsonFormat是AndroidStudio中的一个插件。
创建retrofit实例,我们通过addConverterFactory指定一个factory来对响应反序列化
//进行一系列的序列化设置 ObjectMapper mapper = new ObjectMapper(); //创建Retrofit实例:addConverterFactory(JacksonConverterFactory.create(mapper)) Retrofit retrofit = new Retrofit.Builder() .baseUrl(UrlConstant.BASE_URL2) .addConverterFactory(JacksonConverterFactory.create(mapper)) .build(); ApiService apiService = retrofit.create(ApiService.class); Call<LoginEntity> call = apiService.addJsonConvertFactoryTest(map); call.enqueue(new Callback<LoginEntity>() { @Override public void onResponse(Call<LoginEntity> call, Response<LoginEntity> response) { if (response.isSuccessful()) { LoginEntity bodyList = response.body(); Log.i(TAG, bodyList.getMsg()); Log.i(TAG, bodyList.getData().getCity()+ ""); } } @Override public void onFailure(Call<LoginEntity> call, Throwable t) { } });
2、Retrofit2手动设置网络请求客户端
可以在OkHttpClient中进行一系列的网络请求设置
OkHttpClient client = new OkHttpClient.Builder() .build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(UrlConstant.BASE_URL_TEST) .addConverterFactory(JacksonConverterFactory.create()) //手动设置OkHttpClient客户端 .client(client) .build();
3、Retrofit2添加拦截器,获取日志信息
使用自定义的OkHttpClient
在retrofit2.0中是没有日志功能的;但是retrofit2.0中依赖OkHttp,所以也就能够通过OkHttp中的interceptor来实现获取底层的请求和响应日志;
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(loggingInterceptor) .build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(UrlConstant.BASE_URL_TEST) .addConverterFactory(JacksonConverterFactory.create()) //手动设置OkHttpClient客户端 .client(client) .build();
4、Retrofit2添加请求头
//使用@Headers注解,添加请求头信息 @Headers({ "Content-Type: application/json", }) @FormUrlEncoded @POST("login") Call<LoginEntity> addJsonConvertFactoryTest(@FieldMap Map<String,String> map);
5、Retrofit2通过Https协议访问网络配置
本事上是OkHttp协议支持https协议。
6、Retrofit2设置缓存
在自定义的OkHttpClient中进行设置
ApiService接口中的代码:
package com.example.administrator.retrofit2;import com.example.administrator.retrofit2.entity.ItemEntity;import com.example.administrator.retrofit2.entity.LoginEntity;import com.example.administrator.retrofit2.entity.Student;import java.util.List;import java.util.Map;import okhttp3.ResponseBody;import retrofit2.Call;import retrofit2.http.FieldMap;import retrofit2.http.FormUrlEncoded;import retrofit2.http.GET;import retrofit2.http.Headers;import retrofit2.http.POST;import retrofit2.http.Path;import retrofit2.http.Query;import retrofit2.http.QueryMap;import rx.Observable;/** * Created on 2017/5/9. * Author:crs * Description:ApiService 主要用于封装网络请求参数和url */public interface ApiService { //请求方式;url参数;没有请求参数;返回值类型为Call<ResponseBody> @GET("basil2style") Call<ResponseBody> getNetData(); //获取第一页数据,存在子url @GET("article/page=1") Call<ResponseBody> getPageData(); @GET("article/list/{type}?") Call<ResponseBody> getListData(@Path("type")String type, @Query("page")int page); //为Retrofit添加json转化器 @GET("basil2style") Call<List<Student>> addJsonConvertFactory(); //为Retrofit添加json转化器 //使用@Headers注解,添加请求头信息 @Headers({ "Content-Type: application/json", }) @FormUrlEncoded @POST("login") Call<LoginEntity> addJsonConvertFactoryTest(@FieldMap Map<String,String> map); @GET("search/repositories") Call<ItemEntity> queryRetrofitByGetCallMap(@QueryMap Map<String,String> map); @GET("search/repositories") Call<ItemEntity> queryRetrofitByGetCall(@Query("q")String owner, @Query("since")String time, @Query("page")int page, @Query("per_page")int per_Page); @GET("repos/{owner}/{repo}/contributors") Observable<List<LoginEntity>> contributorsByRxJava(@Path("owner") String owner, @Path("repo") String repo);}
借鉴此博客: http://blog.csdn.net/ljd2038/article/details/51046512
0 1
- Retrofit2.0使用总结
- Retrofit2.0使用总结
- Retrofit2使用总结
- Retrofit2.0使用总结
- Retrofit2.0使用总结
- Retrofit2.0使用总结
- retrofit2、RxJava简单使用总结
- Retrofit2 的使用以及总结
- Retrofit2.0的使用总结
- Retrofit2.0简单使用总结
- Retrofit2.0 简单使用总结
- Retrofit2.0使用总结及注意事项
- Retrofit2.0使用总结及注意事项
- Retrofit2.0使用总结及注意事项
- Retrofit2.0使用总结及注意事项
- Retrofit2.0使用总结及注意事项
- Retrofit2使用
- Retrofit2使用
- 【Unity3D】Mesh
- ScrollView和GestureDetector触屏事件冲突
- linux下brctl配置网桥
- LeetCode刷题——Swap Nodes in Pairs(Medium)
- 经典排序——桶排序——C语言版
- Retrofit2使用总结
- Tensorflow lesson 4---输入参数placeholder
- javascript-qrcode.js教程
- 理解SPRINGMVC的原理
- str指令
- Cardboard如何使用凝视触发移动
- Oracle dmp文件损坏恢复案例
- IP数据包的分析实例
- 《自控力》读书总结