安卓开发学习心得-------Retrofit 2 (一)

现在做的公司项目中,网络连接用的是httpUrlConnection,每次网络访问配置下来非常的麻烦,写了个工具类简化了一些重复的代码,但是用起来还是非常蛋疼。这段时间学习的过程中才从网上了解到retrofit,okhttp,rxjava等框架,并且在2016年非常火。整个项目做下来每个网络访问搭配handler代码量非常繁杂,所以准备开始学习这几个框架,利用RxJava与retrofit取代httpUrlConnection和handler

Retrofit 2 的底层是用的就是okhttp3. okhttp3之前也做过相关的了解,执行下来比较简单,用的是Builder模式,但是处理UI线程的东西还是得使用Handler,不过体验上来说还是强过使用httpUrlConnection.而Retrofit相当于封装了okHttp.并且大量使用注解。而我也从今天开始记录我学习Retrofit的总结体会与心得。

1.创建一个最简单的Retrofit实例

OkHttpClient client = new OkHttpClient(); //初始化OkHttpClient对象
Retrofit retrofit = new Retrofit.Builder()
    .client(client)
      .baseUrl("http://192.168.1.197:8080/financeLease/")
        .build();

可以看到和okhttp的很像,也是Builder模式并且我们都要先初始化okHttpClient。request改为了retrofit。Url改为baseUrl,后面的地址或者其他相关参数是在接口中注解的形式体现,而且要注意baseUrl的结尾需要是”/ “,不然会报异常。

2.定义接口

注解中可以定义是POST还是GET,里面可以添加地址或者地址的参数,如果添加动态地址,则需要在方法参数中path形式标明,如果是参数则用Query,方法返回一般是一个Call对象,Call对象在okHttp中已有使用。Call的类型可以是String或是其他,但一般是ResponseBody,也和okHttp一样。

public interface GitHubAPI {

    @POST("sysUser_login.action/{action}")
    Call<ResponseBody> Login(@Path("action") String action,@Query("username") String username,@Query("password") String password);

}

而在实际项目中是不需要用到path,所以Login方法实际为

public interface RzzlService {

    @POST("sysUser_login.action")
    Call<ResponseBody> Login(@Query("userName") String username,@Query("passWord") String password);

}

编写完接口中的方法后,我们想调用其中的方法则需要配合Retrofit的create方法。

 RzzlService rzzlService = retrofit.create(RzzlService.class);

3.调用接口里的方法

  Call<ResponseBody> call = rzzlService.Login(username,password);
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                try {

                    Log.i(TAG, "json: " + response.body().string());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }


            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.i(TAG, "FailureOnResponse: "+t.getMessage());
            }
        });

首先是定义一个call对象并调用接口中的方法再传入参数,并执行call的enqueue也执行异步的网络访问。同步的可以使用execute方法,异步的会回调Callback并且有分别有成功和失败的回调函数,整个过程和okHttp基本相同,在这里Log出后台的回传给我们的json格式数据。

 json: {"msg":"ok","success":true}

这样完成了一个完整的使用retrofit2来做网络访问的过程,可以看到整个过程比较简单方便,搭配RxJava的话就更能体现它的优势了。当然我们实际的开发中会有更多的其他操作,包括采取什么方式解析回传的数据或者设置网络访问时的header参数还有接口中一些其他的常用的注解等等的内容将在后面的retrofit学习心得中再做记录。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值