Android中的网络编程2——Retrofit

单独开一篇详细的讲一下Retrofit,即使依旧是以okhttp为底层,但在我学习的时候,他引导出更多的需要学习的新知识,所以着重介绍一下,也做一个下一部分的开篇。

1. Retrofit

在第一次接触的时候,傻乎乎的看着官方的文档,完全不明白他到底是怎样的工作方式,这里的第一个障碍就是注解。在java的学习过程中,没有系统的学习过注解的使用,而安卓对注解的使用在今后越来越广泛。所以下一篇会对注解进行介绍。

本次直接进行retrofit部分的介绍。

1. 概述
首先retrofit是一个RESTful的Http网络请求框架的封装,而在上面我说过,其实Retrofit的底层是okhttp。在Retrofit 2.0时,内置Okhttp,前一篇介绍了okhttp的高效的网络请求。而Retrofit的部分就在于封装,使用注解也更多的是为了解耦,讲请求部分与数据操作部分更好的隔离开。这也是注解的一大使用特点。

2. 在使用前:compile 'com.squareup.retrofit2:retrofit:2.0.2'
3. 定义接口:

public interface LoginApi {
    @FormUrlEncoded
    @POST("login")
    Call<LoginBean> getLogin(@Field("username") String username,
                            @Field("password") String password);
}

在使用前,我们拥有了一个网络请求的http链接,上方使用的是post请求,即第二行注解,而使用post请求需要进行编码的即第一行注解,创建方法,返回值是泛型为LoginBean的回调,方法名为getLogin,内部参数第一个为username,对应username,第二个参数为password,对应password。

4. 对应的Bean
这里需要介绍的就是一个插件了,在我们进行代码的书写之前,后端们都会提供这样的接口文档,也能够有示例json,而使用这个json生成对应的bean进行数据请求之后的存取,这里使用到了android studio的一个json生成bean的插件:
gsonformat
将接口文档中示例的json格式的请求结果进行格式生成对应的bean类:loginbean。而我们在定义接口时也是直接获取bean类,不在获取响应体。

5. 创建Retrofit

public static Retrofit RetrofitConfig(){
   return mRetrofit = new Retrofit.Builder()
          .baseUrl(BaseUrl.basUrl)
          .addConverterFactory(GsonConverterFactory.create())
          .build();
}   

使用时创建retrofit对象的流程是:构造器模式,传入基础url,添加gson解析工厂,创建对象。

  • 传入的基础url继访问的url前缀,例如:http://gank.io/api/ 这是一个前缀,即之后的访问,Get请求或是post请求都将以此为基础,get请求即是在此基础之后续写传入的数据。
  • 添加工厂模式创建的gson解析工厂,gson是android转为解析json格式数据的类,入上方的loginbean即是gson解析了json格式数据之后直接解析出来之后直接生成的loginbean对象。

6. 发送请求

mRetrofit.create(LoginApi.class)
      .getLogin(username, password)
      .enqueue(new Callback<LoginBean>() {
           @Override
           public void onResponse(Response<LoginBean> response, Retrofit retrofit) {
               //请求成功之后。。
           }
           @Override
           public void onFailure(Throwable throwable) {
              SnackBarUtils.SnackBarLong(login_bt_login, "网络连接失败!╥﹏╥...");
           }
      });


  • 创建连接:使用之前创建的LoginApi的接口,内部我们使用getlogin方法,传入的数据为登录时获取的账户密码。
  • 添加至请求队列:内部需要回调,即getLogin方法的回调。
  • 成功则进入onResponse方法,失败进入onFailure方法。

Retrofit还有一大优点,内部源码使用handler实现了异步与主线程等的数据传输,能够直接在请求成功后进行ui修改的操作。


未完待续(
//TODO java注解
//TODO Rxjava+Retrofit
//TODO MVVM与MVP
//TODO NoHttp)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值