//封装
package com.example.huguomin.retrofitdemo.manager; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; /** * Created by huguomin on 2017/3/29. */ public class HttpManager { public static final String BASE_URL = "http://tepdapi2.diction.diexun.com/"; private static HttpManager mInstance; private Retrofit retrofit; private HttpManager() { Retrofit.Builder builder = new Retrofit.Builder(); //注意此处,设置服务器的地址 //用于Json数据的转换,非必须 //用于返回Rxjava调用,非必须 retrofit = builder .baseUrl(BASE_URL)//注意此处,设置服务器的地址 .addConverterFactory(GsonConverterFactory.create())//用于Json数据的转换,非必须 .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//用于返回Rxjava调用,非必须 .build(); } public static HttpManager getmInstance() { if (mInstance == null) { synchronized (HttpManager.class) { if (mInstance == null) { mInstance = new HttpManager(); } } } return mInstance; } public Retrofit getRetrofit() { return retrofit; } public <T> T createService(Class<T> clazz) { return retrofit.create(clazz); } }
//接口地址
public interface HomeService { @POST("api/listData") Observable<ResponseBean> postApiChannel(@Query("params")Map<String,String> parans); }
//订阅者
package com.example.huguomin.retrofitdemo.manager; import android.app.ProgressDialog; import android.content.Context; import rx.Subscriber; public class ProgressSubscriber<T> extends Subscriber<T> { private final HttpOnNextListener<T> listener; private Context mContext; /*是否弹框*/ private boolean showPorgress = true; /*加载框可自己定义*/ private ProgressDialog pd; //加载网络的对话框,可以自己定义 /*请求数据*/ public ProgressSubscriber(Context context,HttpOnNextListener<T> listener,boolean isShowProgress){ this.mContext = context; this.listener = listener; showPorgress = isShowProgress; initProgressDialog(context); } private void initProgressDialog(Context context) { if (pd == null &&context!=null){ pd = new ProgressDialog(context); } } @Override public void onStart() { showProgressDialog();//显示对话框 } @Override public void onCompleted() { dismissProgressDialog();//隐藏对话框 } @Override public void onError(Throwable e) { dismissProgressDialog(); if (listener!=null){ listener.onError(e); } } @Override public void onNext(T t) { if(listener != null){ listener.onNext(t); } } /** * 是否需要弹框设置 * * @param showPorgress */ public void setShowPorgress(boolean showPorgress) { this.showPorgress = showPorgress; } /** * 显示加载框 */ private void showProgressDialog() { if (!isShowPorgress()) return; if (pd == null || mContext == null) return; if (!pd.isShowing()) { pd.show(); } } /** * 隐藏 */ private void dismissProgressDialog() { if (!isShowPorgress()) return; if (pd != null && pd.isShowing()) { pd.dismiss(); } } public boolean isShowPorgress() { return showPorgress; } }
//回调接口
package com.example.huguomin.retrofitdemo.manager; public abstract class HttpOnNextListener<T> { /** * 成功后回调方法 * @param t */ public abstract void onNext(T t); /** * 緩存回調結果 * @param string */ public void onCacheNext(String string){ } /** * 失败或者错误方法 * 主动调用,更加灵活 * @param e */ public void onError(Throwable e){ } /** * 取消回調 */ public void onCancel(){ } }
//服务器返回的bean类型
package com.example.huguomin.retrofitdemo; import java.util.List; /** * Created by huguomin on 2017/4/5. */ public class ResponseBean { private String session; private int status; private String desc; private int is_power; private int view_type; private int picCount; private List<ResultBean> result; public String getSession() { return session; } public void setSession(String session) { this.session = session; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public int getIs_power() { return is_power; } public void setIs_power(int is_power) { this.is_power = is_power; } public int getView_type() { return view_type; } public void setView_type(int view_type) { this.view_type = view_type; } public int getPicCount() { return picCount; } public void setPicCount(int picCount) { this.picCount = picCount; } public List<ResultBean> getResult() { return result; } public void setResult(List<ResultBean> result) { this.result = result; } public static class ResultBean { private String id; private String min_picture; private String vip_picture; private String app_picture; private String vip_backup; private int pv_count; private int fav_count; private AttrBean attr; private int fav_type; private String description; private String publish_time; private int pic_width; private int pic_height; private int pic_quality; private int is_collect; private String share_url; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getMin_picture() { return min_picture; } public void setMin_picture(String min_picture) { this.min_picture = min_picture; } public String getVip_picture() { return vip_picture; } public void setVip_picture(String vip_picture) { this.vip_picture = vip_picture; } public String getApp_picture() { return app_picture; } public void setApp_picture(String app_picture) { this.app_picture = app_picture; } public String getVip_backup() { return vip_backup; } public void setVip_backup(String vip_backup) { this.vip_backup = vip_backup; } public int getPv_count() { return pv_count; } public void setPv_count(int pv_count) { this.pv_count = pv_count; } public int getFav_count() { return fav_count; } public void setFav_count(int fav_count) { this.fav_count = fav_count; } public AttrBean getAttr() { return attr; } public void setAttr(AttrBean attr) { this.attr = attr; } public int getFav_type() { return fav_type; } public void setFav_type(int fav_type) { this.fav_type = fav_type; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getPublish_time() { return publish_time; } public void setPublish_time(String publish_time) { this.publish_time = publish_time; } public int getPic_width() { return pic_width; } public void setPic_width(int pic_width) { this.pic_width = pic_width; } public int getPic_height() { return pic_height; } public void setPic_height(int pic_height) { this.pic_height = pic_height; } public int getPic_quality() { return pic_quality; } public void setPic_quality(int pic_quality) { this.pic_quality = pic_quality; } public int getIs_collect() { return is_collect; } public void setIs_collect(int is_collect) { this.is_collect = is_collect; } public String getShare_url() { return share_url; } public void setShare_url(String share_url) { this.share_url = share_url; } public static class AttrBean { private String season; public String getSeason() { return season; } public void setSeason(String season) { this.season = season; } } } }
//在activity中的调用
private void sendReq() { Map<String, String> params = new HashMap<>(); params.put("channel", 2085 + ""); params.put("column", 2088 + ""); // params.put("version", "5.0.0"); HomeService homeService = HttpManager.getmInstance().getRetrofit().create(HomeService.class); // final rx.Observable<ResponseBean> responseBeanObservable = homeService.postApiChannel(params); homeService.postApiChannel(params).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new ProgressSubscriber<ResponseBean>(this, new HttpOnNextListener<ResponseBean>() { @Override public void onNext(ResponseBean responseBean) { showText.setText("获得了 + " + responseBean.getResult().size() + " 个数据"); } @Override public void onError(Throwable e) { } }, true)); }