透过Retrofit使用看其源码设计模式

前言

这篇文章我将从Retrofit的基本用法出发,透过其使用步骤,一步步的探究Retrofit的实现原理及其源码的设计模式。这篇文章可能会将Retrofit中用到的设计模式和其实现原理穿插着写,所以各位同学也可以选择性的阅读。而对于Retrofit具体使用还不太清楚的同学可以去看的另一篇文章Retrofit2的使用介绍

Retrofit2文件上传下载及其进度显示

前面一篇文章介绍了Retrofit2的基本使用,这篇文章接着介绍使用Retrofit2实现文件上传和文件下载,以及上传下载过程中如何实现进度的显示。

文件上传

定义接口
1
2
3
@Multipart
@POST("fileService")
Call<User> uploadFile(@Part MultipartBody.Part file);
构造请求体上传
1
2
3
4
5
File file = new File(filePath);
RequestBody body = RequestBody.create(MediaType.parse("application/otcet-stream"), file);
MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), body);
Call<User> call = getRetrofitService().uploadOneFile(part);
call.enqueue(callback);

Retrofit2使用介绍

前言

对于还不知道Refrofit是什么的同学,我只能说你们太out了,赶紧去Google下,本文是针对Retrofit2.0的使用介绍,当然大家也可以直接去官网上去看使用介绍

添加依赖

要使用Retrofit首先得添加gradle依赖

1
2
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.0'

声明服务接口

依赖添加完成之后,就可以开始撸代码了,首先我们要新建一个Interface,这个接口就是你要请求的接口服务类,就像这个样子

1
2
3
4
5
6
public interface RetrofitService {

@GET("getModelService")
Call<User> getModelService();
...
}

上面这个接口中暂时只声明了一个方法,而在Retrofit中想这样声明的一个方法就代表了一个具体的Http请求接口。Retrofit中方法上添加@GET注解就表示当前方法代表一个Get请求,我们声明的这个请求方法不带任何参数,且返回结果是User对象。
@GET注解括号中的值getModelService就代表http请求地址的具体指向,这个值与下面baseUrl中配置的URL一起组成一个完整的请求地址
Retrofit就是这么任性,它可以帮我们把http的请求结果自动转换成Javabean对象,这将为我们减少不少编码工作。

构造Retrofit对象

接口服务声明完成之后,我们接着需要新建一个Retrofit对象

1
2
3
4
5
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://localhost:8080/AndroidService/")
.addConverterFactory(GsonConverterFactory.create())
.build();
RetrofitService service = retrofit.create(RetrofitService.class);

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×