26
2017
09

retrofit(2017_09_22)

retrofit的基本使用

由来:Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。

原因:网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装。

使用 Retrofit 的步骤共有7个:

步骤1:添加Retrofit库的依赖

1. 在 Gradle加入Retrofit库的依赖
 dependencies {
compile 'com.squareup.retrofit2:retrofit:2.0.2'
// Retrofit库
 }
2. 添加 网络权限
AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>

步骤2:创建 接收服务器返回数据 的类

    public class Reception {
    ...
    // 根据返回数据的格式和数据解析方式(Json、XML等)定义
    // 下面会在实例进行说明
        }

步骤3:创建 用于描述网络请求 的接口

Retrofit将 Http请求 抽象成 Java接口:采用 注解 描述网络请求参数 和配置网络请求参数

用 动态代理 动态 将该接口的注解“翻译”成一个 Http 请求,最后再执行 Http 请求

注:接口中的每个方法的参数都需要使用注解标注,否则会报错

public interface GetRequest_Interface {

    @GET("openapi.do?keyfrom=Yanzhikai&key=2032414398&type=data&doctype=json&version=1.1&q=car")
    Call<Translation>  getCall();
    // @GET注解的作用:采用Get方法发送网络请求

    // getCall() = 接收网络请求数据的方法
    // 其中返回类型为Call<*>,*是接收数据的类(即上面定义的Translation类)
    // 如果想直接获得Responsebody中的内容,可以定义网络请求返回值为Call<ResponseBody>
}

步骤4:创建 Retrofit 实例

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://fanyi.youdao.com/") //设置网络请求的Url地址
                .addConverterFactory(GsonConverterFactory.create()) //设置数据解析器
                .build();

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://fanyi.youdao.com/") // 设置网络请求的Url地址
                .addConverterFactory(GsonConverterFactory.create()) // 设置数据解析器
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) // 支持RxJava平台
                .build();

步骤5:创建 网络请求接口实例 并 配置网络请求参数

// 创建 网络请求接口 的实例
    GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);

    //对 发送请求 进行封装
    Call<Reception> call = request.getCall();

步骤6:发送网络请求(异步 / 同步)

//发送网络请求(异步)
        call.enqueue(new Callback<Translation>() {
            //请求成功时回调
            @Override
            public void onResponse(Call<Translation> call, Response<Translation> response) {
                //请求处理,输出结果
                response.body().show();
            }

            //请求失败时候的回调
            @Override
            public void onFailure(Call<Translation> call, Throwable throwable) {
                System.out.println("连接失败");
            }
        });

// 发送网络请求(同步)


步骤7: 处理服务器返回的数据

//发送网络请求(异步)
        call.enqueue(new Callback<Translation>() {
            //请求成功时回调
            @Override
            public void onResponse(Call<Translation> call, Response<Translation> response) {
                // 对返回数据进行处理
                response.body().show();
            }

            //请求失败时候的回调
            @Override
            public void onFailure(Call<Translation> call, Throwable throwable) {
                System.out.println("连接失败");
            }
        });

// 发送网络请求(同步)
  Response<Reception> response = call.execute();
  // 对返回数据进行处理
  response.body().show()

来自作者:Carson_Ho
链接:http://www.jianshu.com/p/a3e162261ab6


grder的配置:

compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
compile 'com.google.code.gson:gson:2.8.2'

Retrofig的用法:

serviceMethod:包含所有网络请求信息的对象

baseUrl:网络请求的url地址

callFactory:网络请求工厂

adapterFactories:网络请求适配器工厂的集合

converterFactories:数据转换器工厂的集合

callbackExecutor:回调方法执行器


Retrofit的注意事项:


注意:
retrofit2.0后:BaseUrl要以/结尾;@GET 等请求不要以/开头;@Url: 可以定义完整url,不要以 / 开头。


retrofit的注解:




方法注解:

包含@GET、 @POST、 @PUT、 @DELETE 、@PATH、 @HEAD、 @OPTIONS、 @HTTP。

标记注解:

包含   @FormUrlEncoded、  @Multipart、   @Streaming。


参数注解:

包含 @Query, @QueryMap、 @Body、 @Field, @FieldMap、 @Part, @PartMap。

其他注解:

@Path、  @Header,  @Headers、  @Url



@Query,@QueryMap:查询参数,用于GET查询,需要注意的是@QueryMap可以约定是否需要encode

@GET("group/users")
Call<List<User>> groupList(@Query("id") int groupId);
//--> http://baseurl/group/users?id=groupId

Call<List<News>> getNews((@QueryMap(encoded=true) Map<String, String> options);

@Field,@FieldMap:Post方式传递简单的键值对,
需要添加@FormUrlEncoded表示表单提交

@FormUrlEncoded
@POST(“user/edit”)
Call updateUser(@Field(“first_name”) String first, @Field(“last_name”) String last);



@Body:用于POST请求体,将实例对象根据转换方式转换为对应的json字符串参数,
这个转化方式是GsonConverterFactory定义的。

@POST(“add”)
Call

上一篇:基于MVVM架构的BaseActivity封装 下一篇:Commom(十)—— ConfigReader