Retrofit 2.0 基础篇

2016-10-12  本文已影响82人  敲代码的本愿

简介

是一套 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.0baseUrl必须以 / 结束,否则抛出 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 示例
下载文件
下载及进度监听

上一篇下一篇

猜你喜欢

热点阅读