




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Novate网络库:Retrofit2.0和RxJava的又一次完美改进加强介绍Novate的改进加入基础API,减少Api冗余支持离线缓存支持多种方式访问网络(get,put,post,delete)支持文件下载和上传支持请求头参数统一添加支持对返回结果的统一处理支持自定义的扩展API支持统一请求访问网络的流程控制用法基本构建:Novatenovate=newNovate.Builder(this).baseUrl(baseUrl).build();除了基本的构建还提供更了其他API构建你的header头和参数Map<String,String>headers=newHashMap<>();headers.put("apikey","4545sdsddfd7sds");Map<String,String>parameters=newHashMap<>();parameters.put("uid","878787878sdsd");实例化:Novatenovate=newNovate.Builder(this).addParameters(parameters).connectTimeout(8).baseUrl("youapiurl").addHeader(headers).addLog(true).build();如果你需要接入证书:novate.addSSL(hosts,certificates)怎么用?int[]certificates={R.raw.myssl1,R.raw.myssl2,......}int[]hosts={"https://youhosturl2","https://youhosturl2",......}还要说明?certificates是你的ssl证书文件的id,项目中请放到raw资源文件下,myssl.cer怎么生成,这个就不是我这边讲的内容,请用pc浏览器自动导出证书,保存,还不清楚的话,我会醉醉。同样很多人想问我想对novate进行扩展,咋办,别担心,Novate也提供了以下方法novate.addInterceptor().addCallAdapterFactory().callFactory().client()不知道啥意思?请对Retrofit去入门,Retrofit中怎么用,Novate就怎么用。RxJava怎么处理?observable.subscribeOn(Schedulers.io()).unsubscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());内部统一已进行线程控制,所有请求都采用以上线程形式,无语你手动添加。Get提供了novate.get()和novate.get()API区别如下:executeGet来执行get请求,此方法会解析返回你需要的bean实体novate.get()不会帮你解析实体,需要你自己对返回数据解析进行序列化。novate.executeGet("youurl",parameters,newNovate.ResponseCallBack<NovateResponse<ResultModel>>(){@OverridepublicvoidonError(Throwablee){}@OverridepublicvoidonSuccee(NovateResponse<ResultModel>response){//这里novate已对ResponseBody进行解析返回,}});如果你不需要Novate帮你解析返回的数据则调用novate.get()novate.get("youUrl",parameters,newBaseSubscriber<ResponseBody>(ExempleActivity.this){@OverridepublicvoidonNext(ResponseBodyresponseBody){try{Stringjstr=newString(responseBody.bytes());Typetype=newTypeToken<MovieModel>(){}.getType();//这里需要对ResponseBody进行解析,novate并不会帮你解析MovieModelresponse=newGson().fromJson(jstr,type);Toast.makeText(ExempleActivity.this,response.toString(),Toast.LENGTH_SHORT).show();}catch(IOExceptione){e.printStackTrace();}}});Post提供了`novate.post()`和`novate.executePost()`两个API区别如下:executePost来执行Post方式请求,此方法对结果解析返回你需要的bean实体novate.post()不会帮你解析实体,需要你自己对返回数据解析进行序列化。Get和Post代码用法很相似,novate.post()/*****调用post需要你自己解析数据**如果需要解析后返回则调用novate.executeGet()*参考performGet()中的方式*/novate.post("service/getIpInfo.php",parameters,newBaseSubscriber<ResponseBody>(ExempleActivity.this){@OverridepublicvoidonError(Throwablee){}@OverridepublicvoidonNext(ResponseBodyresponseBody){try{Stringjstr=newString(responseBody.bytes());Typetype=newTypeToken<NovateResponse<ResultModel>>(){}.getType();NovateResponse<ResultModel>response=newGson().fromJson(jstr,type);Toast.makeText(ExempleActivity.this,response.getData().toString(),Toast.LENGTH_SHORT).show();}catch(IOExceptione){e.printStackTrace();}}});novate.executePost()novate.executePost("pathUrl",parameters,newNovate.ResponseCallBack<NovateResponse<MyModel>>(){@OverridepublicvoidonError(Throwablee){//todo}@OverridepublicvoidonSuccee(NovateResponse<ResultModel>response){//todo}});Putput方式则提供了novate.put()和novate.executePut()两个API区别和用法参考上面Get和PutDelete同样对Delete提供了novate.delete()和novate.executeDelete()两个API区别和用法参考上面Get和PutBODY假设你需要提交body,Novate也提供了novate.body(),需要直接将你bean对象加入即可,因此可以:ovate.body(url,uesrBean,newBaseSubscriber<ResponseBody>(){@OverridepublicvoidonError(Throwablee){}@OverridepublicvoidonNext(ResponseBodyresponseBody){}});FORM假设你以提交表单,请使用novate.form(),你可以:novate.form(url,newHashMap<String,Object>(),newBaseSubscriber<ResponseBody>(){@OverridepublicvoidonError(Throwablee){}@OverridepublicvoidonNext(ResponseBodyresponseBody){}});JSON假设你需要直接pushjson字符串,你可以:novate.json(url,jsonString,newBaseSubscriber<ResponseBody>(){@OverridepublicvoidonError(Throwablee){}@OverridepublicvoidonNext(ResponseBodyresponseBody){}});UpLoad当然novate特提供了可供上传图片的APInovate.upload()RequestBodyrequestFile=Utils.createFile(file);novate.upload(url,requestFile,newBaseSubscriber<ResponseBody>{@OverridepublicvoidonNext(ResponseBodyresponseBody){}});如果是单文件novate.uploadFlie(url,requestFile,newBaseSubscriber<ResponseBody>{@OverridepublicvoidonNext(ResponseBodyresponseBody){}});upLoadFilesMap<String,RequestBody>map=newHashMap<>();maps.put("e1",requestFile);novate.uploadFlies(url,map,newBaseSubscriber<ResponseBody>(ExempleActivity.this){......});图文一起同时提交图文:适合用户注册等场景novate.uploaduploadbody模式//构建body链式语法高逼格哦RequestBodyrequestBody=newMultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("name","tamic").addFormDataPart("ssword","12345").addFormDataPart("atavr",file.getName(),Utils.createImage(mfile)).build();novate.upload(url,requestBody,newBaseSubscriber<ResponseBody>(ExempleActivity.this){.....});利用part模式//MultipartBody.PartisusedtosendalsotheactualfilenameMultipartBody.Partbody=Utils.createPart("hello这是和后端约定好的key",file);//add描述StringdescriptionString="hello,这是文件描述";RequestBodydescription=Utils.createPartFromString(descriptionString);//执行novate.uploadFlie(url,description,body,newBaseSubscriber<ResponseBody>(ExempleActivity.this){。。。。。});DownLoad如果说有上传文件的接口,必定有下载文件的接口,同样novate也提供了下载文件APInovate.download()novate.download(downUrl,newDownLoadCallBack(){@OverridepublicvoidonStart(){super.onStart();}@OverridepublicvoidonError(Throwablee){}@OverridepublicvoidonCancel(){super.onCancel();}@OverridepublicvoidonProgress(longfileSizeDownloaded){super.onProgress(fileSizeDownloaded);}@OverridepublicvoidonSucess(Stringpath,Stringname,longfileSize){}});通常还有同学要定制下载路径和文件名,当然也有API提供:publicvoidwnload(Stringurl,StringsavePath,Stringname,DownLoadCallBackcallBack){.......}downLoad大文件novate.download(downUrl,newDownLoadCallBack(){''''''''''''});downLoad小文件novate.downloadMin(downUrl,newDownLoadCallBack(){''''''''''''});CustomApi以上方法默认会处理Novate自带的BaseApiService,如果默认的BaseApiService无法满足你的需求时,Novate同样支持你自己的ApiService。定义一个你自己的APiMyAPIpublicinterfaceMyAPI{@GET("url")Observable<MyBean>getdata(@QueryMapMap<String,String>maps);}ExecuteCall通过novate提供create()实例化你的APIMyAPImyAPI=novate.create(MyAPI.class);通过novate.call()来执行你的接口,你也不用关心,novate内部同样已进行RxJava线程控制。novate.call(myAPI.getdata(parameters),newBaseSubscriber<MyBean>(ExempleActivity.this){@OverridepublicvoidonError(Throwablee){}@OverridepublicvoidonNext(MyBeanMyBean){}});}取消每执行novate.xxx()给上层返回了一个Subscription,上层可以调用unsubscribe()来进行取消!
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 买房签约合同范本
- 星辉科技代理合作合同
- 果品销售合同范本
- 合同新篇章:人寿保险条款重大调整影响每个人
- 产品设计合同范本大全
- 工程项目委托代理合同书
- 实验基地租赁合同
- 2025年上海租房合同撰写指导手册
- 环保土石方处理合同范本
- 代理合作合同许可书
- 北师大版八年级下册生物教案全册
- 稳定性冠心病诊断与治疗指南
- DL-T5704-2014火力发电厂热力设备及管道保温防腐施工质量验收规程
- JT-T-610-2004公路隧道火灾报警系统技术条件
- 初中英语比较级和最高级专项练习题含答案
- 大坝安全监测系统验收规范
- 2024年南京铁道职业技术学院单招职业技能测试题库及答案解析
- 校园超市经营投标方案(技术方案)
- 康复医院建筑设计标准
- 社会稳定风险评估 投标方案(技术方案)
- 高层建筑火灾扑救面临问题及对策
评论
0/150
提交评论