Retrofit出自于Square公司,retrofit就是对okhttp做了封装。把网络请求都交给给了Okhttp,只需要通过简单的配置就能使用retrofit来进行网络请求了。Retrofit的网络请求分为:GET、POST、带头的请求。Retrofit的网络请求得到数据是在主线程中完成的。
这里介绍一下Retrofit的简单使用:
1、首先要导入依赖:
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
//下一行的目的可以使用这个工具类进行Gson解析
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
2、先介绍GET请求:
先定义一个接口:Call的泛型是自己定义的实体类
假设接口地址是(我用的百度表示):
https://www.baidu.com/?tn=62095104_oem_dg
//接口里面只需要写这些东西
public interface InterfaceRetrofit {
//这里要value的值是“/”后面的一部分
@GET(value = "?tn=62095104_oem_dg")
Call<Bean> getData();
}
MainActivity中:
//ViewPager的网络请求
Retrofit retrofitViewPager=new Retrofit.Builder()
//基础地址:
.baseUrl("https://www.baidu.com/")
//转换工厂,有这个方法就把Json数据转换成你定义好的实体类
//相当于Gson解析
.addConverterFactory(GsonConverterFactory.create())
.build();
InterfaceRetrofit interfaceRetrofit = retrofitViewPager.create(InterfaceRetrofit.class);
retrofit2.Call<Bean> call1 = handPickAdsRetrofit.getData();
call1.enqueue(new retrofit2.Callback<Bean>() {
@Override
public void onResponse(retrofit2.Call<Bean> call, retrofit2.Response<Bean> response) {
//这里response就是获取到的数据
//response.body(),这个方法获取到Bean类
@Override
public void onFailure(retrofit2.Call<Bean> call, Throwable t) {
Toast.makeText(MainActivity,this, "网络获取失 败",Toast.LENGTH_SHORT).show();
}
});
3、POST请求:
首先也是要先定义一个接口
还是拿百度网址举例子
https://www.baidu.com/?tn=62095104_oem_dg
假设后面还有需要添加的字段,page=1,number=2
public interface InterfaceRetrofit {
@POST(value = "?tn=62095104_oem_dg?")
//这里添加请求字段
Call<Bean> getData(@Query("page") String page
,@Query("number") String number
);
}
MainActivity中:使用方法基本相同,关键在于接口的写法
Retrofit retrofit=new Retrofit.Builder()
.baseUrl("https://www.baidu.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
InterfaceRetrofit interfaceRetrofit = retrofit.create(InterfaceRetrofit.class);
Call<Bean> call = interfaceRetrofit .getData(1,2);
call.enqueue(new retrofit2.Callback<Bean>() {
@Override
public void onResponse(retrofit2.Call<Bean> call, retrofit2.Response<Bean> response) {
//这里response就是获取到的数据
//response.body(),这个方法获取到Bean类
@Override
public void onFailure(retrofit2.Call<Bean> call, Throwable t) {
Toast.makeText(MainActivity,this, "网络获取失 败",Toast.LENGTH_SHORT).show();
}
});
欢迎批评指正