Android开发学习之Retrofit框架
Posted 哈喽喔德
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发学习之Retrofit框架相关的知识,希望对你有一定的参考价值。
Retrofit是一款类型安全的网络框架,基于HTTP协议,服务于android和java语言,在使用时其实就充当了一个适配器的角色,主要是将一个 Java 接口翻译成一个 HTTP 请求对象,然后用内部封装的 OkHttp 去发送这个请求。
github地址:https://github.com/square/retrofit
引入依赖:
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
一、使用方法
- 根据网络Http接口创建Java的接口,以下以username,password为例
- 在Java接口中定义post和get方法,返回值应该为Call
- 为方法和参数加上对应注解,post方法加上@POST(“post”),定义数据提交方式如@FormUrlEncoded,post方法参数加上@Field(“key”);get方法加上@GET(“get”),参数加上@Query(“key”):如下
- 在onCreate()方法中创建Retrofit对象,并利用Retrofit对象的create方法生成接口实现类对象
- 以post为例:调用接口对象的post方法传入参数得到Call对象
- Call对象调用enqueue方法,重写两个回调方法
public interface HttpbinService
@POST("post")
@FormUrlEncoded
Call<ResponseBody> post(@Field("username") String username, @Field("password") String password);
@GET("get")
Call<ResponseBody> get(@Query("username") String username, @Query("password") String password);
retrofit2.Call<ResponseBody> call = httpbinService.post("username","123456");
call.enqueue(new retrofit2.Callback<ResponseBody>()
@Override
public void onResponse(retrofit2.Call<ResponseBody> call, retrofit2.Response<ResponseBody> response)
try
Log.d("TAG",response.body().string());
catch (IOException e)
e.printStackTrace();
@Override
public void onFailure(retrofit2.Call<ResponseBody> call, Throwable t)
);
二、Retrofit转换器
无论是OkHttp还是Retrofit得到的服务器响应都是字符串类型,在实际开发中,我们经常需要对字符串进行解析将其转变成为一个Java Bean对象。如服务器响应数据为json格式字符串,那么需要利用GSON完成反序列化。而Retrofit提供了多个转换器使得响应能够完成自动数据转换。
- 引入转换器依赖:implementation ‘com.squareup.retrofit2:converter-gson:2.9.0’
- 根据json格式创建Java Bean类
- Retrofit接口中的方法返回类型中Call泛型改为Java Bean类
- 申明Retrofit对象时,调用addConverterFactory(GsonConverterFactory.create())添加转换器。
- 获得Response对象后,调用body()方法得到Java Bean类对象
三、Retrofit的嵌套请求和适配器
在实际开发中,可能存在需要先请求A接口再请求B 接口的情况。此时的请求就有了先后顺序,需要嵌套实现请求。这时就可以利用RxJava中的Observable替换Retrofit返回的Call类型。即使用适配器转换其他类型。
github地址:https://github.com/ReactiveX/RxJava
引入依赖:
implementation "io.reactivex.rxjava3:rxjava:3.1.1"
声明Retrofit对象时,调用addCallAdapterFactory(RxJava3CallAdapterFactory.create())添加适配器。
四、文件的上传和下载
上传文件:
- 定义接口,其中定义一个上传方法,注解指定成@Multipart,给方法参数类型指定为@Part MultipartBody.Part file
- 在上传方法中声明Retrofit对象和接口对象
- 声明文件对象
- 声明MultipartBody.Part对象,并使用MultipartBody.Part.createFormData()方法分配对象实例。三个参数分别为关键字,文件名,RequestBody.create方法。
- 调用接口对象的上传方法得到Call对象
6,调用call.excute()方法得到请求内容
如果要上传多个文件,可以在接口方法中定义多个参数;如果数量很多,参数注解改为@PartMap。
下载文件:
- 在接口中定义一个下载方法,使用@GET注解,参数是使用@Url注解的字符串。
- 在上传方法中声明Retrofit对象和接口对象
- 使用接口对象调用下载方法,传入下载链接。调用execute()方法得到Response对象
- 使用Response对象调用.body().byteStream()方法得到InputStream对象
- 使用文件输出流FileOutStream将数据写入文件
以上是关于Android开发学习之Retrofit框架的主要内容,如果未能解决你的问题,请参考以下文章