Xutils3网络请求的封装.docx
《Xutils3网络请求的封装.docx》由会员分享,可在线阅读,更多相关《Xutils3网络请求的封装.docx(18页珍藏版)》请在冰豆网上搜索。
![Xutils3网络请求的封装.docx](https://file1.bdocx.com/fileroot1/2023-5/25/abf24b54-75dd-43d7-ac5d-a7babfb6b06f/abf24b54-75dd-43d7-ac5d-a7babfb6b06f1.gif)
Xutils3网络请求的封装
Xutils3网络请求的封装
1.gradle中添加
compile'org.xutils:
xutils:
3.3.40'
1
1
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,Mapmaps,finalXCallBackcallback){
RequestParamsparams=newRequestParams(url);
if(null!
=maps&&!
maps.isEmpty()){
for(Map.Entryentry:
maps.entrySet()){
params.addQueryStringParameter(entry.getKey(),entry.getValue());
}
}
x.http().get(params,newCallback.CommonCallback(){
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,Mapmaps,finalbooleanifCache,longcacheTime,finalXCallBackcallback){
RequestParamsparams=newRequestParams(url);
params.setCacheMaxAge(cacheTime);
if(null!
=maps&&maps.isEmpty()){
for(Map.Entryentry:
maps.entrySet()){
params.addQueryStringParameter(entry.getKey(),entry.getValue());
}
}
x.http().get(params,newCallback.CacheCallback(){
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,Mapmaps,finalXCallBackcallback){
RequestParamsparams=newRequestParams(url);
if(null!
=maps&&!
maps.isEmpty()){
for(Map.Entryentry:
maps.entrySet()){
params.addBodyParameter(entry.getKey(),entry.getValue());
}
}
x.http().post(params,newCallback.CommonCallback(){
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,Mapmaps,finalbooleanifCache,longcacheTime,finalXCallBackcallback){
RequestParamsparams=newRequestParams(url);
params.setCacheMaxAge(cacheTime);
if(null!
=maps&&maps.isEmpty()){
for(Map.Entryentry:
maps.entrySet()){
params.addBodyParameter(entry.getKey(),entry.getValue());
}
}
x.http().get(params,newCallback.CacheCallback(){
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(){
@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,Mapmaps,Mapfile,finalXCallBackcallback){
RequestParamsparams=newRequestParams(url);
if(maps!
=null&&!
maps.isEmpty()){
for(Map.Entryentry:
maps.entrySet()){
params.addBodyParameter(entry.getKey(),entry.getValue());
}
}
if(file!
=null){
for(Map.Entryentry:
file.entrySet()){
params.addBodyParameter(entry.getKey(),entry.getValue().getAbsoluteFile());
}
}
//有上传文件时使用multipart表单,否则上传原始文件流.
params.setMultipart(rue);
x.http().post(params,newCallback.CommonCallback(){
@Override
publicvoidonSuccess(Stringresult){
onSuccessResponse(result,callback);
}
@Override
publicvoidonError(Throwableex,booleanisOnCallback){
}
@Override
publicvoidonCancelled(CancelledExceptioncex){
}
@Override
publicvoidonFinished(){
}
});
}
上传Json字符串到服务器
/**
*上传Json串到服务器
*@paramurl
*@parammaps将需要传的各个参数放在Map集合里面
*/
publicvoidupLoadJson(Stringurl,Mapmaps,finalXCallBackcallback){
JSONObjectjs_request=newJSONObject();//服务器需要传参的json对象
try{
for(Map.Entryentry:
maps.entrySet()){
js_request.put(entry.getKey(),entry.getValue());
}
}catch(JSONExceptione){
e.printStackTrace();
}
RequestParamsparams=newRequestParams(url);
params.setAsJsonContent(rue);
params.setBodyContent(js_request.toString());
x.http().post(params,newCallback.CommonCallback(){//发起传参为json的post请求,
//Callback.CacheCallback的泛型为后台返回数据的类型,
//根据实际需求更改
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
publicvoidonSucces