Retrofit的基本使用
来源:互联网 发布:图片修复软件免费版 编辑:程序博客网 时间:2024/06/05 00:34
retrofit介绍
Retrofit与okhttp共同出自于Square公司,retrofit就是对okhttp做了一层封装。把网络请求都交给给了Okhttp,我们只需要通过简单的配置就能使用retrofit来进行网络请求了,其主要作者是Android大神JakeWharton
有兴趣的可以到官网查看:
retorfit官网
retrofit使用
导包
直接build gradle里添加依赖就可以了:
//Retrofit2所需要的包
compile ‘com.squareup.retrofit2:retrofit:2.0.0-beta4’
//ConverterFactory的Gson依赖包
compile ‘com.squareup.retrofit2:converter-gson:2.0.0-beta4’
//ConverterFactory的String依赖包
compile ‘com.squareup.retrofit2:converter-scalars:2.0.0-beta4’
使用
Retrofit提供的请求方式注解有@GET和@POST,参数注解有@PATH和@Query等
详细的注解对应的解释及处理方式
可参考此文章:http://blog.csdn.net/fuhao476200/article/details/52980318
Get请求
示例:
创建RetrofitNetService业务访问接口添加如下注解:
@GET("goods/{id}") Call<ResponseBody> getgoods(@Path("id") int id);
Call ,此处T是返回的数据类型,如知道则可填写相对应的类型,如不知则可用泛型代替,或者ResponseBody代替。
@Path用于替换Url路径中的变量字符,这里的参数id会被填充至{id}中,形成完整的Url请求地址,{id}相当于一个占位符;
示例:
@GET("book/search") Call<BookSearchResponse> getSearchBooks( @Query("name") String name, @Query("tag") String tag);
@Query
用于拼接在Url路径后的查询参数,但相对于直接在Url后拼接,@Query则是添加一个变量:类似BaseUrl+book/search?name={name}&type={type}
推荐:
类型及对应url模式可以查看
@QueryMap与Query一样,只不过是多个参数示例:
@GET("News") Call<NewsBean> getItem(@QueryMap Map<String, String> map);
或者
@GET("News") Call<NewsBean> getItem( @Query("newsId") String newsId,@QueryMap Map<String, String> map);
post请求
@Post post请求大约有四种方式,常用的就两种,
以键值对表单提交方式:
@FormUrlEncoded @POST("Comments/{newsId}") Call<Comment> reportComment( @Path("newsId") String commentId, @Query("access_token") String access_token, @Field("reason") String reason);
@body类型提交方式:
RequestBody
//登入接口 @Headers({"Contenttype:application/json;charset=UTF-8"}) @POST("login") Call<LoginReturnBean> loginApp(@Body RequestBody requestBody);
添加header
使用注解的方式
添加一个Header参数
@Headers({"Contenttype:application/json;charset=UTF-8"}) @GET("/tasks") Call<List<Task>> getTasks();
添加多个Header参数
@Headers({ "Accept: application/vnd.yourapi.v1.full+json", "User-Agent: Your-App-Name" }) @GET("/tasks/{task_id}") Call<Task> getTask(@Path("task_id") long taskId);
动态添加Header
@FormUrlEncoded @POST("checkout") Call<CheckOutResponse> checkout(@Header("userid") String userId, @FieldMap Map<String, String> params);
统一添加header
使用代码的方式,则需要使用拦截器
OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); httpClient.addInterceptor(new Interceptor() { @Override public Response intercept(Interceptor.Chain chain) throws IOException { Request original = chain.request(); Request request = original.newBuilder() .header("token", "a") .header("tokenb","b") .method(original.method(), original.body()) .build(); return chain.proceed(request); } } OkHttpClient client = httpClient.build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(API_BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .client(client) .build();
简单分装
** * @创建者 wyj * @创建时间 2017/11/8 10:22. * @描述 * @更新者 * @更新时间 2017/11/8 10:22. */public class RetrofitUtil { private static Retrofit retrofit; private static OkHttpClient.Builder sHttpClient; private static OkHttpClient sClient; /** * @return retrofit 实例 */ public static Retrofit getRetrofitInstance() { if (retrofit == null) { synchronized (Retrofit.class) { retrofit = new Retrofit.Builder() .baseUrl(Url.BaseUrl) .addConverterFactory(GsonConverterFactory.create()) .client(getOkHttpClient()) .build(); } } return retrofit; } private static OkHttpClient getOkHttpClient() { if (sHttpClient == null) { sHttpClient = new OkHttpClient.Builder(); sHttpClient.addInterceptor(new Interceptor() { @Override public okhttp3.Response intercept(Chain chain) throws IOException { Request original = chain.request(); Request request = original.newBuilder() .addHeader("token","efgh") .addHeader("code","abcd") .method(original.method(), original.body()) .build(); return chain.proceed(request); } }); if (sClient == null) { sClient = sHttpClient.build(); } } return sClient; } /** * @return 接口实例 */ public static RetrofitNetService getHttpServiceInstance() { return getRetrofitInstance().create(RetrofitNetService.class); }}
使用方式:
RetrofitNetService httpServiceInstance = RetrofitUtil.getHttpServiceInstance();RequestBody bod2y = RequestBody.create(MediaType.parse("application/json; charset=utf-8"),GsonTools.createGsonString(loginBody)); Call<LoginReturnBean> call = httpServiceInstance.loginApp(bod2y); //同步请求 /* try { Response<LoginReturnBean> execute = call.execute(); } catch (IOException e) { e.printStackTrace(); }*/ //异步请求 call.enqueue(new Callback<LoginReturnBean>() { @Override public void onResponse(Call<LoginReturnBean> call, Response<LoginReturnBean> response) { if (response.isSuccessful()) { LoginReturnBean body =response.body(); } } @Override public void onFailure(Call<LoginReturnBean> call, Throwable t) { } });
关于http的一些基础知识:
http://www.jianshu.com/p/e544b7a76dac
使用方法参考文章:
http://www.jianshu.com/p/331f0bf161c2
http://www.jianshu.com/p/308f3c54abdd
- Retrofit的基本使用
- Retrofit的基本使用
- 《Retrofit系列》Retrofit的基本使用
- android retrofit的基本使用
- Retrofit的使用基本步骤
- retrofit的基本使用(1)
- 【Retrofit 】Retrofit 基本使用教程
- Retrofit的使用与基本的封装
- Android Retrofit 2.0的基本使用
- 网络请求框架Retrofit的基本使用
- Retrofit网络请求框架的基本使用
- 1、Retrofit+Okhttp的基本使用
- Android Retrofit 2.0的基本使用
- Retrofit的基本使用(Get请求)
- Retrofit 基本使用教程
- Retrofit-基本使用
- Retrofit框架基本使用
- Retrofit 基本使用教程
- wxpy识别语音消息
- angularjs ajax无刷新下载
- JS获取当前年份,添加到HTML标签 select 的 option里
- (实战项目三)新浪网分类资讯爬虫
- VUE-SVG图标
- Retrofit的基本使用
- 69.设计模式笔记-责任链模式
- USB话务耳机|SSS1629|话务耳机方案|开发设计|方案应用|批量出货
- Tomcat启动命令
- 用PHP实现一个注册网页
- 数据结构之栈
- 这几个动图告诉你科学的神奇,看完瞬间觉得智商都提高了
- 对5种主流编程语言的吐槽
- Ubuntu下安装MySQL,并开启远程