我们知道在比较流行的网络框架里,有okhttp,retrofit,volley,而okhttp只支持 get 和post,而retrofit支持 get,put,post,header,等等 在开发中我对retrofit简单封装了一下。
1.导入依赖:
compile 'com.squareup.retrofit2:retrofit:2.4.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
2.创建ApiService:
@GET("query")
Call<TopicBean> getTopicList(@Query("app") String app, @Query("action") String action, @Query("shuidishichuan")
String shuidishichuan, @Query("page") int page);
创建BaseModel:
public class BaseModel<T> {
private long code ;//请求返回码
private String msg;// 请求返回信息
private int cost;
private String timestamp;
private T data;//请求返回的body
public long getCode() {
return code;
}
public void setCode(long code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
RetrofitUtils
public class RetrofitUtils {
private Retrofit retrofit;
private static ApiService apiService;
public Handler mHandler = new Handler(Looper.getMainLooper());
private static final class Holder{
private static final RetrofitUtils INSTANCE =new RetrofitUtils();
}
public void initRxRetrofit(){
OkHttpClient client =new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10,TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.build();
retrofit =new Retrofit.Builder()
.baseUrl("填入网址")
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
apiService=retrofit.create(ApiService.class);
}
public static RetrofitUtils getInstance(){
return Holder.INSTANCE;
}
public static ApiService Api(){
if (apiService == null)
throw new IllegalStateException("需要APPLICATION种初始化");
return apiService;
}
public <T> void requestData(Call<T> call, final WaterDropInterdace<T> waterDropInterdace) {
call.enqueue(new Callback<T>() {
@Override
public void onResponse(final Call<T> call, final Response<T> response) {
mHandler.post(new Runnable() {
@Override
public void run() {
waterDropInterdace.onSuccess(response.body(),response.message(),response.code());
}
});
}
@Override
public void onFailure(final Call<T> call, final Throwable t) {
mHandler.post(new Runnable() {
@Override
public void run() {
waterDropInterdace.onFailure(call,t);
}
});
}
});
}
定义接口
public interface WaterDropInterdace<T> {
void onSuccess(T t, String msg, long code);
void onFailure(Call call, Throwable throwable);
}
Callback回调
public class WaterDropCallback<T> implements Callback<T> {
@Override
public void onResponse(Call<T> call, Response<T> response) {
}
@Override
public void onFailure(Call<T> call, Throwable t) {
}
}
public class WaterDropImpl {
// 话题
public void getTopicList(WaterDropInterdace<TopicBean> waterDropCallback) {
Call<TopicBean> topicList = RetrofitUtils.Api().getTopicList("HotEvent", "loadEventList", "2", 1);
RetrofitUtils.getInstance().requestData(topicList, waterDropCallback);
}
}
在Fragmenrt里使用
protected void initData() {
new WaterDropImpl().getTopicList(new WaterDropInterdace<TopicBean>() {
@Override
public void onSuccess(TopicBean topicBean, String msg, long code) {
if (code == 200) {
list.clear();
list.addAll(topicBean.getData().getList());
adapter.notifyDataSetChanged();
}
refreshLayout.setRefreshing(false);
}
@Override
public void onFailure(retrofit2.Call call, Throwable throwable) {
Log.e("shuidi", throwable.getMessage());
Toast.makeText(getContext(), "失败", Toast.LENGTH_SHORT).show();
}
});
}
最后我们开一下效果