您的位置:首页 > 理论基础 > 计算机网络

Android网络开发框架Retrofit(一:介绍篇)

2016-01-04 22:28 549 查看


Android网络开发框架Retrofit(一:介绍篇)

Android的开发技术日新月异,变化之快使得开发者或喜或忧,有的开发者能及时跟着趋势走,使得自己开发起程序来,可以借鉴到很有国内网优秀的框架,效率得到了相当大的提升,也有一些开发者长期处于啃老本状态,很久不更新自己的技术,使得一旦出现一些新的技术,要花很长时间去琢磨,导致开发效率不进而退。

因为技术之间也存在一定的关联性,所以在这建议广大开发者,在平常下班之余,可以多去网上了解了解一些比较前沿的开发技术,可能不会立刻使用得到,但等到真正使用得时候,再去看的话,就会大大的浪费时间,所以,我写的这篇博客,也是想将一些比较前沿的技术分享给大家,这是本人的第一篇博客,以后会陆陆续续分享一些我个人的开发经验,下面,就开始对今天的主题进行分享。

Retrofit是一款Java的网络请求框架,可以用于Java和Android,现用于Android非常适合,主要针对应用接口的请求,这个框架和以往常用的框架使用方法不太一样。

比如:android-async-http,他的使用方法是传入URL,将请求的结果通过回调的方式进行相应

AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.csdn.net/", new AsyncHttpResponseHandler() {
    @Override
    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
        }
    }

    @Override
    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
        String result = null;
        try {
            result = new String(responseBody, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }       
    }
});


在onSuccess来处理最后成功返回的数据

还有volley 等等网络框架,请求的方法都和android-async-http相类似,都是配置请求地址和参数通过回调来处理结果

然而,今天的主人公Retrofit,请求数据的方式有点不同,哪里不同呢,有两点:

1、请求地址和参数的配置不同,在Retrofit中,它是这样配置的

//要写到一个接口里
@GET("/login.php")
Call<<UserBean> login(@Query("id") int id, @Query("psw") String psw);


2、使用的方法不同,它直接调用上面定义好的一个接口方法,就可以获取出数据并转成实体类了

Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www.csdn.net")
.addConverterFactory(GsonConverterFactory.create())
.build();
Call<UserBean> call = apiService.login(123456,"woshimima");
Response<UserBean> response = call.execute();
UserBean userBean = response.body();


看到这里,可能有人觉得不太舒服了,好像这样代码好像很难看,并且请求回来的数据也很难调试

是的,因为我只是简单演示下这个使用过程,在实际使用中会对上面的代码进一步封装的,比如将

Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www.csdn.net")
.addConverterFactory(GsonConverterFactory.create())
.build();


放到一个公共管理类进行统一管理,亲们可以下载我给出的Demo来慢慢体验

大家是不是觉得,咦,这样写,不会阻塞吗,主线程一阻塞,就会挂掉了。是的,上面的这个代码是不可以放到主线程来执行的,要开启新线程来执行的,这个是一种,还有一种是可以和android-async-http使用类似的,也是通过回调的方式将数据回调回来,欲知详情,看Demo

那么,是不是又有了一个疑问,就是假如使用上面那样阻塞式来调用,又要我们写个线程代码,真的很累是不是,有这个疑问的同学,是非常好的

在这里我介绍出另一个很好用的框架,就是RxJava,Retrofit可以结合它来使用,通过RxJava来开启线程,然后让RxJava将数据返回到主线程,Retrofit框架结合RxJava使用起来才是真正好用,所以要想深入使用Retrofit的同学,就必须去学习下RxJava哦

今天的介绍到此结束了,接下来,我会对这个Retrofit框架的应用和源码进行讲解,谢谢大家
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: