Retrofit(一)

官网 http://square.github.io/retrofit/
GitHub https://github.com/square/retrofit

介绍了Retrofit简单使用

新建项目
添加权限


添加依赖

compile 'com.squareup.retrofit2:retrofit:2.3.0'

添加解析器,这里展示两种常用的解析器(选择合适的一种即可)
更多请参考https://github.com/square/retrofit/tree/master/retrofit-converters

    compile 'com.squareup.retrofit2:converter-scalars:2.3.0'  //String解析器
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'  //gson解析器

测试接口(这里使用了nohttp提供的接口) http://api.nohttp.net/

1.Retrofit的简单使用

新建一个接口HttpService:

public interface HttpService {
    
    @GET("top250")
    Call getTop(@Query("start") int start, @Query("count") int count);
    
    @FormUrlEncoded
    @POST("postBody")
    Call getUpload(@Field("aaa") String aaa, @Field("bbb") String bbb);
}

使用

  • GET请求
//请求接口 https://api.douban.com/v2/movie/top250?start=0&count=2
private void netGet() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://api.douban.com/v2/movie/")
                .addConverterFactory(GsonConverterFactory.create())  //转换器
                .build();

        HttpService httpService = retrofit.create(HttpService.class);

        Call top = httpService.getTop(0, 2);
        
        top.enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) {
                Zx.d(response.toString());
                Zx.d(response.headers());
                DouBanBean douBanBean = response.body();
            }

            @Override
            public void onFailure(Call call, Throwable t) {
                Zx.d(t.getMessage());
            }
        });
        
    }
  • POST请求
//请求接口 http://api.nohttp.net/postBody   aaa=111  bbb=222
private void netPost() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://api.nohttp.net/")  //地址
                .addConverterFactory(ScalarsConverterFactory.create())  //转换器
                .build();

        HttpService httpService = retrofit.create(HttpService.class);

        Call upload = httpService.getUpload("111", "222");
        upload.enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) {
                Zx.d(response.toString());
                Zx.d(response.headers());
                Zx.d(response.body());
            }

            @Override
            public void onFailure(Call call, Throwable t) {
                Zx.d(t.getMessage());
            }
        });
    }

over

其中@GET @POST指定了请求方法,Retrofit框架提供了很多注解,其中HTTP注解有五个

@GET
@POST
@PUT
@DELETE
@HEAD

GET

  • @Path 替换参数
@GET("group/{id}/users")
List groupList(@Path("id") int groupId);

这里使用了传入的groupId替换了"group/{id}/users"中的{id}

  • @Query 查询参数
 @GET("login")
List httpLogin(@Query ("name") String name,@Query ("password") String password);

这里相当于login?name=xxx&password=xxx

  • 同时存在的情况 可在后面继续添加@Path或@Query,或将多个查询参数放入Map中
@GET("group/{id}/users")
List groupList(@Path("id") int groupId,@Query ("name") String name,@Query("password") String password);
//或
@GET("group/{id}/users")
List groupList(@Path("id") int groupId,@QueryMap Map options);

POST

  • 提交表单数据
    @FormUrlEncoded
    @POST("postBody")
    Call getLogin(@Field("name") String name, @Field("password") String password);

使用 @FormUrlEncoded 修饰请求方法,可以把表单数据提交到服务端
用 @Field 修饰key-value对

上传文件

使用 @Multipart 修饰请求方法

    @Multipart
    @POST("images")
    Call upload(@Part("description") RequestBody description, @Part MultipartBody.Part file);
    private void netUpload() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://www.sss.saa/do/")
                .addConverterFactory(ScalarsConverterFactory.create())
                .build();

        HttpService httpService = retrofit.create(HttpService.class);

        RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), "aaa");
        RequestBody fileBody = RequestBody.create(MediaType.parse("image/*"), new File(""));
        MultipartBody.Part part = MultipartBody.Part.createFormData("pototo", "", fileBody);
        
        httpService.upload(requestBody, part);
    }

推荐阅读:
给 Android 开发者的 RxJava 详解
RxJava 与 Retrofit 结合的最佳实践
Retrofit2.0使用详解
你真的会用Retrofit2吗?Retrofit2完全教程

你可能感兴趣的:(Retrofit(一))