首先依赖
// Android 支持 Rxjava // 此处一定要注意使用RxJava2的版本 compile 'io.reactivex.rxjava2:rxjava:2.0.1' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' // Android 支持 Retrofit compile 'com.squareup.retrofit2:retrofit:2.1.0' // 衔接 Retrofit & RxJava // 此处一定要注意使用RxJava2的版本 compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0' // 支持Gson解析 compile 'com.squareup.retrofit2:converter-gson:2.1.0' //解析成String compile 'com.squareup.retrofit2:converter-scalars:2.0.0' compile files('libs/fastjson.jar')
fastjson是我自己项目需要用到,解析成String类型的也是我自己项目需要用到的。
先写接口
public interface GetRequestInterface { @POST(".") Observable<String> getCall(@Body JSONObject parms); }
公司项目全部是post请求的,所以就封装一个工具类,只需要直接调用传入参数就可以。
回调接口
public interface HttpRequestUtils { /** * post方式请求数据 * @param mContext 上下文 * @param url 地址 * @param parmsJson params参数 * @param listener */ void loadingDataPost(Context mContext, String url, JSONObject parmsJson , OnLoadDataListener listener); public interface OnLoadDataListener { /** * 数据正常回调 * * @param flag 是否请求成功,这里的成功是在我们项目接口里面的成功和失败 * @param result 成功则返回数据,失败则返回原因 */ void onLoadCallBack(boolean flag, String result); /** * 出现异常时候的回调, * 效果和上面的接口种的flag=false类似,但是这个失败是属于访问层次的失败 * * @param errorStr 失败的原因 */ void onError(String errorStr); } }
工具类
/** * Created by guoyan on 2017/6/1 * 请求数据的封装类 post请求 */ public class OkData { /** * 请求网络的方法 * @param url 请求url * @param parmsJson 请求参数 fasejson的JSONObject对象 * @param listener 请求回调 */ public void requesData(String url, JSONObject parmsJson, final HttpRequestUtils.OnLoadDataListener listener) { OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); httpClient.addInterceptor(new Interceptor() { @Override public Response intercept(Interceptor.Chain chain) throws IOException { Request original = chain.request(); Request request = original.newBuilder() .addHeader("key", EncoderByMd5()) .addHeader("version", "1.5.1") .addHeader("application/json", "charset=utf-8") .method(original.method(), original.body()) .build(); return chain.proceed(request); } }); OkHttpClient client = httpClient.build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .client(client) //字符串解析 .addConverterFactory(ScalarsConverterFactory.create()) //支持gson .addConverterFactory(GsonConverterFactory.create()) //支持rejava2 .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); GetRequestInterface requst = retrofit.create(GetRequestInterface.class); Observable<String> call = requst.getCall(parmsJson); call.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<String>() { @Override public void onSubscribe(Disposable d) { //开始请求 } @Override public void onNext(String value) { //请求数据 if (listener != null) { listener.onLoadCallBack(true, value); } } @Override public void onError(Throwable e) { //请求失败 if (listener != null) { listener.onError(e.toString()); } } @Override public void onComplete() { } }); } }
使用
private void initData() { JSONObject parmsJson = new JSONObject(); parmsJson.put("client", ""); parmsJson.put("blackBox", ""); parmsJson.put("token", ""); parmsJson.put("type_id", ""); parmsJson.put("product_id", ""); parmsJson.put("ruleSize", 7); OkData data = new OkData(); data.requesData(url, parmsJson, new HttpRequestUtils.OnLoadDataListener() { @Override public void onLoadCallBack(boolean flag, String result) { Log.e("请求成功",result); } @Override public void onError(String errorStr) { Log.e("请求失败",errorStr); } }); }
每次请求网络只需要调用这一个方法,传入参数就可以了,可以根据自己的需求,自己定制。
放在博客以便以后有需要的时候找不到,还要从新写。