Android 网络请求库:Retrofit

jopen 5年前

Retrofit

特点

  1. 性能最好,处理最快
  2. 使用REST API时非常方便;
  3. 传输层默认就使用OkHttp;
  4. 支持NIO;
  5. 拥有出色的API文档和社区支持
  6. 速度上比volley更快;
  7. 如果你的应用程序中集成了OKHttp,Retrofit默认会使用OKHttp处理其他网络层请求。
  8. 默认使用Gson

使用

Retrofit支持同步和异步两种方式,在使用时,需要将请求地址转换为接口,通过注解来指定请求方法,请求参数,请求头,返回值等信息。还是使用之前的person的那段json值,get请求到服务器后从数据库查询数据,返回值为查询到的数据,post请求向服务器提交一条数据,返回值为提交的数据。
首先完成请求所用的service,是一个interface,完全通过注解完成配置

import retrofit.Callback;  import retrofit.http.Field;  import retrofit.http.FormUrlEncoded;  import retrofit.http.GET;  import retrofit.http.Headers;  import retrofit.http.POST;  import retrofit.http.Path;  import retrofit.http.Query;    /**   * Created by lizhangqu on 2015/5/11.   */  public interface PersonService {      @Headers({              "Cache-Control: max-age=640000",              "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"      })      //通过注解设置请求头      @GET("/{test}/rest.php")      //设置请求方法为get,相对路径为注解内内容,其中{test}会被@Path注解指定内容替换      Person getPerson(@Path("test") String dir,@Query("name") String name);      //@Query用于指定参数        @FormUrlEncoded      //urlencode      @POST("/test/rest1.php")      //post提交      Person updatePerson(@Field("name") String name,@Field("age") int age);      //@Field提交的域          @POST("/test/rest1.php")      void updatePerson(@Field("name") String name,@Field("age") int age, Callback<Person> callback);      //异步回调,不能指定返回值  }

GET
使用时,通过RestAdapter的实例获得一个接口的实例,其本质是动态代理,注意含有返回值的方法是同步的,不能UI线程中调用,应该在子线程中完成
RestAdapter restAdapter = new RestAdapter.Builder()                          .setEndpoint("http://121.41.119.107")                          .build();                  PersonService personService=restAdapter.create(PersonService.class);                  Person person=personService.getPerson("test","zhangsan");                  Log.d("TAG",person.toString());

  • POST

POST的调用同Get,获得adapter后获得一个代理对象,然后通过这个代理对象进行网络请求

Person person1=personService.updatePerson("lizhangqu", 12);  Log.d("TAG",person1.toString());

  • 异步请求

如果要使用异步请求,需要将接口中的方法返回值修改会void,再加入回调参数Callback,就如PersonService中第三个方法一样,请求完成后会回调该callback对象的success或者fail方法。

RestAdapter restAdapter = new RestAdapter.Builder()                  .setEndpoint("http://121.41.119.107")                  .build();          PersonService personService=restAdapter.create(PersonService.class);          personService.updatePerson("lizhangqu",23, new Callback<Person>() {              @Override              public void success(Person person, Response response) {                  Log.d("TAG", person.toString());              }                @Override              public void failure(RetrofitError error) {                }          });

项目主页:http://www.open-open.com/lib/view/home/1435381942341