RxVolley使用文档 ―― RxVolley = Volley + RxJava + OkHtt

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

RxVolley使用文档——RxVolley=Volley+RxJava+OkHttp一.RxVolley使用指南1.概述RxVolley是一个基于Volley的网络请求库;同时支持RxJava;可以选择使用OKHttp替代默认的HttpUrlConnection做网络请求;可以选择使用图片加载功能(复用的网络请求将有效减少apk体积);移除了原Volley的HttpClient相关API,可在API23环境编译;内置了RxBus的实现,可有效替换掉EventBus等相关库;2.依赖使用RxVolley,需要在你的build.gradle文件中加入compile'com.kymjs.rxvolley:rxvolley:1.0.7'如果你还想使用OKhttp来替代默认的HttpUrlconnection,需要加入compile'com.kymjs.rxvolley:okhttp:1.0.7'如果你想使用RxVolley的图片加载功能(复用http模块可以有效减少apk大小),需要加入compile'com.kymjs.rxvolley:bitmapcore:1.0.7'使用RxVolley做网络请求3.简单实现//get请求简洁版实现RxVolley.get((){@OverridepublicvoidonSuccess(Stringt){Loger.debug(请求到的数据:+t);}});//post请求简洁版实现HttpParamsparams=newHttpParams();params.put(name,kymjs);params.put(age,18);params.put(image,newFile(path))//文件上传RxVolley.post((){@OverridepublicvoidonSuccess(Stringt){Loger.debug(请求到的数据:+t);}});4.对Cookie等请求头的处理//用户登录逻辑(HttpCallback中有很多重载方法,可以选择需要的实现)HttpParamsparams=newHttpParams();params.put(name,kymjs);params.put(age,18);params.put(password,helloword);RxVolley.post((){@OverridepublicvoidonSuccess(MapString,Stringheaders,byte[]t){Loger.debug(请求到的数据:+newString(t));//获取到的cookieLoger.debug(===+headers.get(Set-Cookie));}});//向服务器传递cookie信息HttpParamsparams=newHttpParams();params.put(name,kymjs);params.put(age,100);params.putHeaders(cookie,yourcookie);RxVolley.post((){@OverridepublicvoidonSuccess(Stringt){Loger.debug(请求到的数据:+t);}});比起入门章节讲述的网络请求,你可能希望有更多的需求5.构建网络请求HttpParamsparams=newHttpParams();//同之前的设计,传递http请求头可以使用putHeaders()params.putHeaders(cookie,yourcookie);params.putHeaders(User-Agent,rxvolley);//传递http请求参数可以使用put()params.put(name,kymjs);params.put(age,18);//http请求的回调,内置了很多方法,详细请查看源码//包括在异步响应的onSuccessInAsync():注不能做UI操作//网络请求成功时的回调onSuccess()//网络请求失败时的回调onFailure():例如无网络,服务器异常等HttpCallbackcallback=newHttpCallback(){@OverridepublicvoidonSuccessInAsync(byte[]t){}@OverridepublicvoidonSuccess(Stringt){}@OverridepublicvoidonFailure(interrorNo,StringstrMsg){}}ProgressListenerlistener=newProgressListener(){/***@paramtransferredBytes进度*@paramtotalSize总量*/@OverridepublicvoidonProgress(longtransferredBytes,longtotalSize){}}newRxVolley.Builder().url()//接口地址//请求类型,如果不加,默认为GET可选项://POST/PUT/DELETE/HEAD/OPTIONS/TRACE/PATCH.httpMethod(RxVolley.Method.GET)//设置缓存时间:默认是get请求5分钟,post请求不缓存.cacheTime(6)//内容参数传递形式,如果不加,默认为FORM表单提交,可选项JSON内容.contentType(RxVolley.ContentType.FORM).params(params)//上文创建的HttpParams请求参数集//是否缓存,默认是get请求5缓存分钟,post请求不缓存.shouldCache(true).progressListener(listener)//上传进度.callback(callback)//响应回调.encoding(UTF-8)//编码格式,默认为utf-8.doTask();//执行请求操作6.对RxJava的支持RxVolley支持返回一个Observable类型的数据,如下是Result类的原型publicclassResult{publicMapString,Stringheader;publicbyte[]data;publicResult(MapString,Stringheader,byte[]data){this.header=header;this.data=data;}}执行一次请求,并返回ObservableObservableResultobservable=newRxVolley.Builder().url()//defaultGETorPOST/PUT/DELETE/HEAD/OPTIONS/TRACE/PATCH.httpMethod(RxVolley.Method.POST).cacheTime(6)//default:get5min,post0min.params(params).contentType(RxVolley.ContentType.JSON).getResult();//使用getResult()来返回RxJava数据类型//当拿到observable对象后,你可以设置你自己的subscriberobservable.subscribe(subscriber);完整的使用示例publicclassMainActivityextendsAppCompatActivity{privateSubscriptionsubscription;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ObservableResultobservable=newRxVolley.Builder().url().contentType(RxVolley.ContentType.FORM).getResult();subscription=observable.map(newFunc1Result,String(){@OverridepublicStringcall(Resultresult){returnnewString(result.data);}}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(newAction1String(){@Overridepublicvoidcall(Stringresult){Log.i(kymjs,======网络请求+result);}});}@OverrideprotectedvoidonDestroy(){super.onDestroy();if(subscription!=null&&subscription.isUnsubscribed()){subscription.unsubscribe();}}}7.自定义请求也许你是Volley的重度使用者(就像我),那么你一定是因为Volley自由的扩展性而爱上它的。你可以通过创建一个RequestRxVolley.Builder().setRequest(yourRequest).doTask();11去执行你的自定义Request一个典型自定义Request的示例:/***Form表单形式的Http请求*/publicclassFormRequestextendsRequestbyte[]{privatefinalHttpParamsmParams;publicFormRequest(RequestConfigconfig,HttpParamsparams,HttpCallbackcallback){super(config,callback);if(params==null){params=newHttpParams();}this.mParams=params;}@OverridepublicStringgetCacheKey(){if(getMethod()==RxVolley.Method.POST){returngetUrl()+mParams.getUrlParams();}else{returngetUrl();}}@OverridepublicStringgetBodyContentType(){if(mParams.getContentType()!=null){returnmParams.getContentType();}else{returnsuper.getBodyContentType();}}@OverridepublicArrayListHttpParamsEntrygetHeaders(){returnmParams.getHeaders();}@Overridepublicbyte[]getBody(){ByteArrayOutputStreambos=newByteArrayOutputStream();try{mParams.writeTo(bos);}cat

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功