retrofit(2017_09_22)

来源:互联网 发布:难听的歌网络歌手 编辑:程序博客网 时间:2024/06/06 14:01

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

原创粉丝点击