Android Xutils3网络请求的封装详解及实例代码
Xutils3网络请求的封装详解
封装了一个Xutil3的网络请求工具类,分享给大家,本人水平有限,不足之处欢迎指出。
使用前先配置xutils3:
1.gradle中添加
compile'org.xutils:xutils:3.3.40'
2.自定义Application
/** *CreatedbyJoeon2016/9/25. */ publicclassMyAppextendsApplication{ @Override publicvoidonCreate(){ super.onCreate(); x.Ext.init(this); x.Ext.setDebug(BuildConfig.DEBUG);//是否输出debug日志,开启debug会影响性能. } }
3.清单文件application节点点添加
android:name=".activitys.MyApp"
上面三步走完接下来就可以使用了
先写一个单利类,话不多说上代码
privatevolatilestaticXutilsHttpinstance; privateHandlerhandler; privateXutilsHttp(){ handler=newHandler(Looper.getMainLooper()); } /** *单利模式 *@return */ publicstaticXutilsHttpgetInstance(){ if(instance==null){ synchronized(XutilsHttp.class){ if(instance==null){ instance=newXutilsHttp(); } } } returninstance; }
写好接口
//接口回调 publicinterfaceXCallBack{ voidonResponse(Stringresult); voidonFail(Stringresult); } //下载的接口回调 publicinterfaceXDownLoadCallBack{ voidonstart(); voidonLoading(longtotal,longcurrent,booleanisDownloading); voidonSuccess(Fileresult); voidonFail(Stringresult); voidonFinished(); }
封装普通get请求
/** *普通get请求 *@paramurl *@parammaps *@paramcallback */ publicvoidget(Stringurl,Map<String,String>maps,finalXCallBackcallback){ RequestParamsparams=newRequestParams(url); if(null!=maps&&!maps.isEmpty()){ for(Map.Entry<String,String>entry:maps.entrySet()){ params.addQueryStringParameter(entry.getKey(),entry.getValue()); } } x.http().get(params,newCallback.CommonCallback<String>(){ privatebooleanhasError=false; privateStringresult=null; @Override publicvoidonSuccess(Stringresult){ if(result!=null){ this.result=result; } } @Override publicvoidonError(Throwableex,booleanisOnCallback){ hasError=true; Toast.makeText(x.app(),ex.getMessage(),Toast.LENGTH_LONG).show(); } @Override publicvoidonCancelled(CancelledExceptioncex){ } @Override publicvoidonFinished(){ if(!hasError&&result!=null){ onSuccessResponse(result,callback); } } }); }
带缓存的get请求
/** *带缓存数据的异步get请求 *@paramurl *@parammaps *@paramifCache是否缓存 *@paramcacheTime缓存存活时间 *@paramcallback */ publicvoidgetCache(Stringurl,Map<String,String>maps,finalbooleanifCache,longcacheTime,finalXCallBackcallback){ RequestParamsparams=newRequestParams(url); params.setCacheMaxAge(cacheTime); if(null!=maps&&maps.isEmpty()){ for(Map.Entry<String,String>entry:maps.entrySet()){ params.addQueryStringParameter(entry.getKey(),entry.getValue()); } } x.http().get(params,newCallback.CacheCallback<String>(){ privatebooleanhasError=false; privateStringresult=null; @Override publicbooleanonCache(Stringresult){ if(ifCache&&null!=result){ this.result=result; } //true:信任缓存数据,不在发起网络请求;false不信任缓存数据. returnifCache; } @Override publicvoidonSuccess(Stringresult){ if(result!=null){ this.result=result; } } @Override publicvoidonError(Throwableex,booleanisOnCallback){ hasError=true; Toast.makeText(x.app(),ex.getMessage(),Toast.LENGTH_LONG).show(); } @Override publicvoidonCancelled(CancelledExceptioncex){ } @Override publicvoidonFinished(){ if(!hasError&&result!=null){ onSuccessResponse(result,callback); } } }); }
普通post请求
/** *异步post请求 *@paramurl *@parammaps *@paramcallback */ publicvoidpost(Stringurl,Map<String,String>maps,finalXCallBackcallback){ RequestParamsparams=newRequestParams(url); if(null!=maps&&!maps.isEmpty()){ for(Map.Entry<String,String>entry:maps.entrySet()){ params.addBodyParameter(entry.getKey(),entry.getValue()); } } x.http().post(params,newCallback.CommonCallback<String>(){ privatebooleanhasError=false; privateStringresult=null; @Override publicvoidonSuccess(Stringresult){ if(result!=null){ this.result=result; } } @Override publicvoidonError(Throwableex,booleanisOnCallback){ hasError=true; onFailResponse(ex.getMessage(),callback); } @Override publicvoidonCancelled(CancelledExceptioncex){ } @Override publicvoidonFinished(){ if(!hasError&&result!=null){ onSuccessResponse(result,callback); } } }); }
带缓存的post请求
/** *带缓存数据的异步post请求 *@paramurl *@parammaps *@paramifCache是否缓存 *@paramcacheTime缓存存活时间 *@paramcallback */ publicvoidpostCache(Stringurl,Map<String,String>maps,finalbooleanifCache,longcacheTime,finalXCallBackcallback){ RequestParamsparams=newRequestParams(url); params.setCacheMaxAge(cacheTime); if(null!=maps&&maps.isEmpty()){ for(Map.Entry<String,String>entry:maps.entrySet()){ params.addBodyParameter(entry.getKey(),entry.getValue()); } } x.http().get(params,newCallback.CacheCallback<String>(){ privatebooleanhasError=false; privateStringresult=null; @Override publicbooleanonCache(Stringresult){ if(ifCache&&null!=result){ this.result=result; } //true:信任缓存数据,不在发起网络请求;false不信任缓存数据. returnifCache; } @Override publicvoidonSuccess(Stringresult){ if(result!=null){ this.result=result; } } @Override publicvoidonError(Throwableex,booleanisOnCallback){ hasError=true; Toast.makeText(x.app(),ex.getMessage(),Toast.LENGTH_LONG).show(); } @Override publicvoidonCancelled(CancelledExceptioncex){ } @Override publicvoidonFinished(){ if(!hasError&&result!=null){ onSuccessResponse(result,callback); } } }); }
文件的下载
/** *下载文件 *@paramurl *@paramfilePath *@paramcallback */ publicvoiddownFile(Stringurl,StringfilePath,finalXDownLoadCallBackcallback){ RequestParamsparams=newRequestParams(url); params.setSaveFilePath(filePath); params.setAutoRename(true); x.http().get(params,newCallback.ProgressCallback<File>(){ @Override publicvoidonSuccess(finalFileresult){ //下载完成会走该方法 handler.post(newRunnable(){ @Override publicvoidrun(){ if(callback!=null){ callback.onSuccess(result); } } }); } @Override publicvoidonError(finalThrowableex,booleanisOnCallback){ handler.post(newRunnable(){ @Override publicvoidrun(){ if(null!=callback){ callback.onFail(ex.getMessage()); } } }); } @Override publicvoidonCancelled(CancelledExceptioncex){ } @Override publicvoidonFinished(){ handler.post(newRunnable(){ @Override publicvoidrun(){ if(callback!=null){ callback.onFinished(); } } }); } //网络请求之前回调 @Override publicvoidonWaiting(){ } //网络请求开始的时候回调 @Override publicvoidonStarted(){ handler.post(newRunnable(){ @Override publicvoidrun(){ if(null!=callback){ callback.onstart(); } } }); } //下载的时候不断回调的方法 @Override publicvoidonLoading(finallongtotal,finallongcurrent,finalbooleanisDownloading){ //当前进度和文件总大小 handler.post(newRunnable(){ @Override publicvoidrun(){ if(callback!=null){ callback.onLoading(total,current,isDownloading); } } }); } }); }
文件的上传
/** *文件上传 * *@paramurl *@parammaps *@paramfile *@paramcallback */ publicvoidupLoadFile(Stringurl,Map<String,String>maps,Map<String,File>file,finalXCallBackcallback){ RequestParamsparams=newRequestParams(url); if(maps!=null&&!maps.isEmpty()){ for(Map.Entry<String,String>entry:maps.entrySet()){ params.addBodyParameter(entry.getKey(),entry.getValue()); } } if(file!=null){ for(Map.Entry<String,File>entry:file.entrySet()){ params.addBodyParameter(entry.getKey(),entry.getValue().getAbsoluteFile()); } } //有上传文件时使用multipart表单,否则上传原始文件流. params.setMultipart(true); x.http().post(params,newCallback.CommonCallback<String>(){ @Override publicvoidonSuccess(Stringresult){ onSuccessResponse(result,callback); } @Override publicvoidonError(Throwableex,booleanisOnCallback){ } @Override publicvoidonCancelled(CancelledExceptioncex){ } @Override publicvoidonFinished(){ } }); }
上传Json字符串到服务器
/** *上传Json串到服务器 *@paramurl *@parammaps将需要传的各个参数放在Map集合里面 */ publicvoidupLoadJson(Stringurl,Map<String,String>maps,finalXCallBackcallback){ JSONObjectjs_request=newJSONObject();//服务器需要传参的json对象 try{ for(Map.Entry<String,String>entry:maps.entrySet()){ js_request.put(entry.getKey(),entry.getValue()); } }catch(JSONExceptione){ e.printStackTrace(); } RequestParamsparams=newRequestParams(url); params.setAsJsonContent(true); params.setBodyContent(js_request.toString()); x.http().post(params,newCallback.CommonCallback<String>(){//发起传参为json的post请求, //Callback.CacheCallback<String>的泛型为后台返回数据的类型, //根据实际需求更改 privatebooleanhasError=false; privateStringresult=null; @Override publicvoidonSuccess(Stringresult){ if(result!=null){ this.result=result; } } @Override publicvoidonError(Throwableex,booleanisOnCallback){ ex.printStackTrace(); } @Override publicvoidonCancelled(CancelledExceptioncex){ } @Override publicvoidonFinished(){ if(!hasError&&result!=null&&callback!=null){ onSuccessResponse(result,callback); } } }); }
使用案例:
下载调用:
XutilsHttp.getInstance().downFile(url,Utils.getSDPath()+"/"+"ShopBox_Guide_Video/"+Utils.getFileName(url),newXutilsHttp.XDownLoadCallBack(){ @Override publicvoidonstart(){ showDialog(DIALOG_DOWNLOAD_PROGRESS); } @Override publicvoidonLoading(longtotal,longcurrent,booleanisDownloading){ //当前进度和文件总大小 mProgressDialog.setMax((int)total); mProgressDialog.setProgress((int)current); } @Override publicvoidonSuccess(Fileresult){ //下载完成会走该方法 playMedia(result.getPath()); } @Override publicvoidonFail(Stringresult){ Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show(); } @Override publicvoidonFinished(){ dismissDialog(DIALOG_DOWNLOAD_PROGRESS); } });
带缓存get请求
XutilsHttp.getInstance().postCache(url,null,true,60000,newXutilsHttp.XCallBack(){ @Override publicvoidonResponse(Stringresult){ //成功获取数据 } @Override publicvoidonFail(Stringresult){ Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show(); } });
就是这么简单,不足之处请大家多多指点
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!