Retrofit学习笔记(一)
16lz
2021-01-26
Retrofit 2.0
Retrofit是SQUARE美国一家移动支付公司最近新发布的在Android平台上http访问的开源项目
一、Retrofit是什么
github官方描述:A type-safe HTTP client for Android and Java
直译一下:一款为Android和Java提供的类型-安全的HTTP客户端。
总的来说,它是用来封装网络请求的。
它采用接口注释的方式来调用网络请求,不用写实现层(已封装好)。
二、Retrofit怎么使用
1.添加依赖
//Retrofit Type-safe HTTP client for Android and Java compile 'com.squareup.retrofit2:retrofit:2.2.0' //转换器 compile 'com.squareup.retrofit2:converter-gson:2.2.0' compile 'com.squareup.retrofit2:converter-jackson:2.2.0'
下面两个依赖是Json和Java对象之间的转化器 你可以不添加
用基础的HttpURLConnection自己写过网络请求的同学肯定被这样的问题困扰:需要自己解析Json(实现Json和对象之间的转化),而Retrofit支持各种Json转化器:
-
Gson: com.squareup.retrofit2:converter-gson
-
Jackson: com.squareup.retrofit2:converter-jackson
-
Moshi: com.squareup.retrofit2:converter-moshi
-
Protobuf: com.squareup.retrofit2:converter-protobuf
-
Wire: com.squareup.retrofit2:converter-wire
-
Simple XML: com.squareup.retrofit2:converter-simplexml
-
Scalars (primitives, boxed, and String): com.squareup.retrofit2:converter-scalars
2.初始化
Retrofit retrofit = new Retrofit.Builder() .baseUrl("XXX你的访问URLXXX") .addConverterFactory(GsonConverterFactory.create()) .build();
3.编写API
假设我要用userDevice 和 schoolId 去查询年级名和Id
public interface APIManager { @POST("XXX/XXX你的访问具体接口的路径XXX") Call getGradeNameAndId(@Query("userDevice") String userDevice, @Query("schoolId") Integer schoolId);}
其中AjaxMsg是和接口返回数据对应的对象
@Query("name")来设定body的parameters(参数)
-
如果想用表单 @FieldMap
@FormUrlEncoded@POST("/url") Call postForm( @FieldMap Map maps);
-
如果直接用对象 @Body
@POST("url") Call PostBody( @Body Objects objects);
-
如果直接多参数 @QueryMap
@PUT("/url")Call queryMap( @QueryMap Map maps);
-
如果上传文件 @Part
@Multipart@POST("/url")Call uploadFlie( @Part("description") RequestBody description, @Part("files") MultipartBody.Part file);
-
如果多文件上传 @PartMap()
@Multipart@POST("{url}")Call uploadFiles( @Path("url") String url, @PartMap() Map maps);
4.调用API
Call call = apiService.getGradeNameAndId("inf",1); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if(response.isSuccessful()){ Log.d("httpResult","isSuccessful"); AjaxMsg grade = response.body(); Log.d("httpResult",grade.getGradeName()); } else{ Log.d("httpResult","isNotSuccessful"); } } @Override public void onFailure(Call call, Throwable t) { } });
Retrofit内部用了Json转换器自动将Json转换为Java对象
response.body()返回的就是这个对象
更多相关文章
- Android跨进程通信IPC之6——Parcel--Binder对象的写入和读出
- OkHttp3实现原理
- Android(安卓)WebView 精简Demo
- Android检查网络是否可用及上网请求
- android-async-http如何使用
- 第五章 网络 之 Android网络知识&框架(二)
- Drawable和Bitmap转换
- Android开发重修
- android retrofit2.0框架的使用介绍