简介
是一套 RESTful
架构的 Android(JAVA)
客户端实现,基于注解,提供JSON to POJO(Plain Ordinary Java Object
,简单Java
对象),POJO to JSON
,网络请求(GET,POST
等)封装。
Retrofit 2.0
默认使用 OkHttp 3
。
官网:http://square.github.io/retrofit/
GitHub:https://github.com/square/retrofit
添加依赖
项目的build.gradle
添加依赖:
compile 'com.squareup.retrofit2:retrofit:2.2.0'
创建实例
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://localhost:1234/")
.build();
注意:
Retrofit 2.0
的baseUrl
必须以/
结束,否则抛出IllegalArgumentException
错误。
定义接口
//例:获取指定 id 的 blog
public interface BlogService{
@GET("blog/{id}")
Call<ResponseBody> getBlog(@Path("id") int id);
}
注意:
需要用Retrofit
创建一个BlogService
的代理对象,然后调用方法。
如果是@GET("http://ip.taobao.com/service/getIpInfo.php")
,则baseUrl
无效。
BlogService service = retrofit.create(BlogService.class);
接口调用
Call<ResponseBody> call = service.getBlog(3);
//同步
//需处理 android.os.NetworkOnMainThreadException
try{
ResponseBody<ResponseBody> response = call.execute();
String body = response.body.string();//获取返回体的字符串
Log.i("Callback", body);
} catch(IOException e){
e.printStackTrance();
}
//异步
call.enqueue(new Callback<ResponseBody>(){
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response){
try{
Log.i("Callback", response.body().string());
} catch(IOException e){
e.printStackTrance();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t){
t.printStackTrance();
}
});
注意:
每个Call
实例只能使用一次,调用clone()
可以创建一个新的可用实例。
在Android
上,callback
在主线程执行;在JVM
上,callback
在调用HTTPRequest
的线程执行。
移除请求
call.cancle();
学习
Future Studio
文件下载
RxJava 与 Retrofit 结合的最佳实践
okHttp 3 示例
下载文件
下载及进度监听