Retrofit网络请求库应用01

来源:互联网 发布:韩美林 知乎 编辑:程序博客网 时间:2024/06/10 22:14

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及以上,我在添加依赖的时候找不到该包,所以我只能手动

compile 'com.squareup.retrofit2:retrofit:2.0.1'

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

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

public interface Service {    @GET("/")    Call<String> getBaidu();}

 3:MainActivity中添加Retrofit对象

 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, ?>转换成?(因为不一定是什么类型)。

.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实例

Service service = retrofit.create(Service.class);        Call<String> baidu = service.getBaidu();        baidu.enqueue(this);

 重写两个方法:

 @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:添加网络权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

 运行结果: