Android Retrofit使用详细教程
目录
一、 Retrofit是什么
Retrofit是Android用来接口请求的网络框架,内部是基于OkHttp实现的,retrofit负责接口请求的封装,retrofit可以直接将接口数据解析为Bean类、List集合等,直接简化了中间繁琐的数据解析过程
二、 Retrofit的简单使用
Retrofit在github的地址 :https://github.com/square/retrofit
Retrofit官方使用介绍 :https://square.github.io/retrofit/
2.1 在项目中引入retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'//解析json字符所用
2.2 清单文件AndroidManifest.xml中添加网络权限
Google在Android p为了安全起见,已经明确规定禁止http协议额,接口都是https请忽略,如果接口有http请在清单文件AndroidManifest.xml中application先添加networkSecurityConfig配置
android:name=".App" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:networkSecurityConfig="@xml/network_security_config" android:requestLegacyExternalStorage="true" android:supportsRtl="true" android:theme="@style/AppTheme" tools:ignore="UnusedAttribute"> res文件夹下新建xml文件夹,xml文件夹中新建network_security_config文件,文件内容如下: <?xml version="1.0" encoding="utf-8"?> 2.3 创建Retrofit Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .addConverterFactory(GsonConverterFactory.create())//设置数据解析器 .build(); 2.4 创建RetrofitApi //定义 网络API 地址 public interface RetrofitApi{ @GET("users/{user}/repos") Call } 2.5 请求接口 //获取API GitHubService service = retrofit.create(RetrofitApi.class); Call 2.6 发送请求数据 //异步 call.enqueue(new Callback @Override public void onResponse(Call //处理请求数据 } @Override public void onFailure(Call } }); //同步 try { Response execute.body().toString(); } catch (IOException e) { e.printStackTrace(); } 三、Retrofit注解参数类型 3.1 网络请求方法 3.1.1 GET请求 //简单的get请求(没有参数) @GET("user") Call //简单的get请求(URL中带有参数) @GET("News/{userId}") Call //参数在url问号之后 @GET("trades") Call //get请求,多个请求参数 @GET("trades") Call @GET("trades") Call @Query("userId") String userId, @QueryMap Map //get请求,不使用baseUrl,直接请求url地址 @GET Call @QueryMap Map 3.1.2 POST请求 http://192.168.43.173/api/trades/{userId} //需要补全URL,post的数据只有一条reason @FormUrlEncoded @POST("trades/{userId}") Call @Path("userId") String userId, @Field("reason") String reason; http://192.168.43.173/api/trades/{userId}?token={token} //需要补全URL,问号后需要加token,post的数据只有一条reason @FormUrlEncoded @POST("trades/{userId}") Call @Path("userId") String userId, @Query("token") String token, @Field("reason") String reason; //post一个对象 @POST("trades/{userId}") Call @Path("userId") String userId, @Query("token") String token, @Body TradesBean bean; //post请求,不使用baseUrl,直接请求url地址 @FormUrlEncoded @POST Call @FieldMap Map 3.2 标记类 3.2.1 @FormUrlEncoded 3.2.2 @Multipart @Multipart @POST Call @Part MultipartBody.Part file); 3.2.3 @Steaming /** * 大文件官方建议用 @Streaming 来进行注解,不然会出现IO异常,小文件可以忽略不注入 * * @param fileUrl 地址 * @return ResponseBody */ @Streaming @GET Call 3.3 网络请求类 3.3.1 @Header & @Headers 添加请求头 &添加不固定的请求头 // @Header @GET("user") Call // @Headers @Headers("Authorization: authorization") @GET("user") Call // 以上的效果是一致的。 // 区别在于使用场景和使用方式 // 1. 使用场景:@Header用于添加不固定的请求头,@Headers用于添加固定的请求头 // 2. 使用方式:@Header作用于方法的参数;@Headers作用于方法 3.3.2 @Body 3.3.3 @Field & @FieldMap 3.3.4 @Part & @PartMap 发送 Post请求 时提交请求的表单字段 与@Field的区别:功能相同,但携带的参数类型更加丰富,包括数据流,所以适用于 有文件上传 的场景,与 @Multipart 注解配合使用 3.3.5 @Query和@QueryMap 用于 @GET 方法的查询参数(Query = Url 中 ‘?’ 后面的 key-value) //参数在url问号之后 @GET("trades") Call 3.3.6 @Path URL地址的缺省值 @GET("users/{user}/repos") Call // 访问的API是:https://api.github.com/users/{user}/repos // 在发起请求时, {user} 会被替换为方法的第一个参数 user(被@Path注解作用) 3.3.7 @Url 直接传入一个请求的 URL变量 用于URL设置 @GET Call // 当有URL注解时,@GET传入的URL就可以省略 // 当GET、POST...HTTP等方法中没有设置Url时,则必须使用 {@link Url}提供 下一篇文章总结一下Retrofit+Rxjava封装成网络请求库 到此这篇关于Android Retrofit使用详情的文章就介绍到这了,更多相关Android Retrofit使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 您可能感兴趣的文章:> getData(@Path("user") String user);
> call= service.getData("user");
>() {
> call, Response
> response) {
> call, Throwable throwable) {
> execute = call.execute();
相关文章
- Android入门之使用eclipse进行源码开发的方法
- Android Activity的生命周期与加载模式超详细图文解析
- 8种android 对话框(Dialog)使用方法详解
- Android 4.4版MIUI V5简单评测体验介绍
- Android O有什么新特性?Android O(安卓8.0)首波新特性曝光
- Android入门之Adapter的简单使用教程
- Android ListView分页功能实现方法
- Android开发 Bundle传值的理解与使用小结
- A8体育直播吧NBA手机版 for android v5.8.9 安卓手机版
- 3D宝软手机桌面 for android v4.3.6 安卓版