Retrofit网络请求库应用01
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>
运行结果:
本文版权归作者所有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。