关于Retrofit2我也是闻名已久了,一直想去用这个库,但就之前的水平来说,我是看不懂的…
在我阅读能力随着技术一步步提升之后,我发现我终于看得懂了,于是赶快使用一下凑个热闹。
首先还是老样子,我看的博客地址是
http://blog.csdn.net/carson_ho/article/details/73732076
写的非常详细,感谢这些大佬们!
关于Retrofit2的详细使用在上面的博客中已经有了,我再写在这篇博客里面难免有些画蛇添足的味道。所以我还是仅仅写一下它的最简单最基础的用法。
下面就来实践一下吧,使用Retrofit2库之前,需要添加依赖:
// Retrofit库
compile 'com.squareup.retrofit2:retrofit:2.0.2'
由于Retrofit2中已经封装了okhttp,所以其实不需要再去添加okhttp的依赖了。
同时,网络权限也不能忘了:
<uses-permission android:name="android.permission.INTERNET"/>
下面我需要从一个网址去请求数据,比如从下面这个网址:
https://way.jd.com/jisuapi/channel?appkey=cb9fca97f7ad37f2626d2f8a268b04ec
它的返回数据是:
接下来创建一个类,用于解析返回数据
可以使用GsonFormat创建,创建类NewsTypeBean.class
public class NewsTypeBean {
private ResultBean result;
public ResultBean getResult() {
return result;
}
public void setResult(ResultBean result) {
this.result = result;
}
public static class ResultBean {
private List<String> result;
public List<String> getResult() {
return result;
}
public void setResult(List<String> result) {
this.result = result;
}
}
}
之后创建用于描述网络请求的接口,在Retrofit中将Http请求抽象成 Java接口采用注解描述网络请求参数和配置网络请求参数 :
public interface GetRequest_interface {
@GET("channel?appkey=cb9fca97f7ad37f2626d2f8a268b04ec")
Call<NewsTypeBean> getCall();
}
这里使用的是@Get注解,注解中传递的是URL的后半部分,这里是有许多种设置方法的,详细的在之前的博客地址去了解即可。
接口设置完毕后就是具体使用了,使用步骤如下:
- 步骤1:创建 Retrofit 实例
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://way.jd.com/jisuapi/") // 设置网络请求的Url地址
.addConverterFactory(GsonConverterFactory.create()) // 设置数据解析器
.addCallAdapterFactory(RxJavaCallAdapterFactory.create()) // 支持RxJava平台
.build();
- 步骤2:创建网络请求接口实例
// 创建 网络请求接口 的实例
GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);
//对 发送请求 进行封装
Call<Reception> call = request.getCall();
- 步骤3:发送网络请求(异步 / 同步)
//发送网络请求(异步)
call.enqueue(new Callback<Translation>() {
//请求成功时回调
@Override
public void onResponse(Call<Translation> call, Response<Translation> response) {
//请求处理,输出结果
response.body().show();
}
//请求失败时候的回调
@Override
public void onFailure(Call<Translation> call, Throwable throwable) {
System.out.println("连接失败");
}
});
// 发送网络请求(同步)
Response<Reception> response = call.execute();
- 步骤4:处理返回数据。
由于需要用到Gson来解析数据,所以在此之前需要添加依赖:
com.squareup.retrofit2:converter-gson:2.0.2
然后是具体代码MainActivity.class:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
request();
}
private void request(){
//1.创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://way.jd.com/jisuapi/")
.addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析
.build();
//2.创建网络请求接口的实例
GetRequest_interface request_interface = retrofit.create(GetRequest_interface.class);
//3.对发送请求进行封装
Call<NewsTypeBean> call = request_interface.getCall();
//4.发送网络请求(异步)
call.enqueue(new Callback<NewsTypeBean>() {
//请求成功时回调
@Override
public void onResponse(Call<NewsTypeBean> call, Response<NewsTypeBean> response) {
NewsTypeBean data = response.body();
List<String> dataList = data.getResult().getResult();
Log.e("MainActivity" ,"请求成功");
for (String title : dataList){
Log.e("MainActivity", title);
}
}
//请求失败时回调
@Override
public void onFailure(Call<NewsTypeBean> call, Throwable t) {
Log.e("MainActivity" ,"请求失败" + t.getMessage());
}
});
}
}
看一下打印效果吧:
其实这样用的话和okhttp差别不大,但是以后会配合到rxjava使用,所以先了解一下Retrofit2最好。
—————————————————
附一些需要经常用到的东西:
网络请求适配器 | Gradle依赖 |
---|---|
Gson | com.squareup.retrofit2:converter-gson:2.0.2 |
Jackson | com.squareup.retrofit2:converter-jackson:2.0.2 |
Simple XML | com.squareup.retrofit2:converter-simplexml:2.0.2 |
Protobuf | com.squareup.retrofit2:converter-protobuf:2.0.2 |
Moshi | com.squareup.retrofit2:converter-moshi:2.0.2 |
Wire | com.squareup.retrofit2:converter-wire:2.0.2 |
Scalars | com.squareup.retrofit2:converter-scalars:2.0.2 |
_______________________________________________________________
网络请求适配器 | Gradle依赖 |
---|---|
guava | com.squareup.retrofit2:adapter-guava:2.0.2 |
Java8 | com.squareup.retrofit2:adapter-java8:2.0.2 |
rxjava | com.squareup.retrofit2:adapter-rxjava:2.0.2 |