前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Retrofit网络请求库应用01

Retrofit网络请求库应用01

作者头像
cMusketeer
发布2018-03-28 11:02:36
6880
发布2018-03-28 11:02:36
举报
文章被收录于专栏:Android机器圈Android机器圈

PS:什么是Retrofit?

  在官方文档中有这样一句话--A type-safe HTTP client for Android and Java(一个类型安全的http client库),具体的话就去问百度吧。Retrofit是网络请求库,是一个开源的。主要是写代码会更少,更快,条例更清晰,刚开始学肯定是觉得还是自己写httpconnect好,自己写,想怎么写就怎么写,每个东西都有一个过程,现在主流的网络开源库还有volley,okhttp等,这都不错,今天我就写一篇简单的retrofit使用访问百度,返回百度页面的源码,这仅仅是为了证明该库怎么使用而已,我们先说标红内容,下一篇就是如何快速解析JSON和XML。开始。

主要内容:

  • Retrofit加载
  • 如何使用
  • GET和POST
  • JSON和XML解析

1:首先我们要加载Retrofit包

  我的studio是2.0,我在官方文档上看到现在是Retrofit2.3.0,编辑器要求是studio2.3、java7及以上,我在添加依赖的时候找不到该包,所以我只能手动

代码语言:javascript
复制
compile 'com.squareup.retrofit2:retrofit:2.0.1'

 2:创建接口Service,当然这个名字可以随便起。

先使用GET,/为根目录,在MainActivity中写http://www.baidu.com,总的网址就是http://www.baidu.com/,在后面加了一个/.

代码语言:javascript
复制
public interface Service {
    @GET("/")
    Call<String> getBaidu();
}

 3:MainActivity中添加Retrofit对象

代码语言:javascript
复制
 Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://www.baidu.com")
                .addConverterFactory(new Converter.Factory() {
                    @Override
                    public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
                        return new Converter<ResponseBody, String>() {
                            @Override
                            public String convert(ResponseBody value) throws IOException {
                                return value.string();
                            }
                        };
                    }
                })
                .build();

 这里需要注意的是:我们在调用百度网址的时候,加载到的数据并不是String,准确来说是二进制流或者说是网络请求回调(请求包,头数据等)。我们需要把它转换成String,Converter<ResponseBody, ?>转换成?(因为不一定是什么类型)。

代码语言:javascript
复制
.addConverterFactory(new Converter.Factory() {
                    @Override
                    public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
                        return new Converter<ResponseBody, String>() {
                            @Override
                            public String convert(ResponseBody value) throws IOException {
                                return value.string();//写String即可
                            }
                        };
                    }
                })

 然后拿到Service实例

代码语言:javascript
复制
Service service = retrofit.create(Service.class);
        Call<String> baidu = service.getBaidu();
        baidu.enqueue(this);

 重写两个方法:

代码语言:javascript
复制
 @Override
    public void onResponse(Call<String> call, Response<String> response) {
        Log.e("fanhuizhi",response.body()+"。。。");
    }

    @Override
    public void onFailure(Call<String> call, Throwable throwable) {
        throwable.printStackTrace();
        Log.e("fanhuizhi","出错了");
    }

 4:添加网络权限

代码语言:javascript
复制
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

 运行结果:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-12-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档