Xutils3网络请求的封装
Posted Gradle官方文件
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xutils3网络请求的封装相关的知识,希望对你有一定的参考价值。
封装了一个Xutil3的网络请求工具类,分享给大家,本人水平有限,不足之处欢迎指出。
使用前先配置xutils3:
1.gradle中添加
compile 'org.xutils:xutils:3.3.40'
2.自定义Application
/**
* Created by Joe on 2016/9/25.
*/
public class MyApp extends Application
@Override
public void onCreate()
super.onCreate();
x.Ext.init(this);
x.Ext.setDebug(BuildConfig.DEBUG); // 是否输出debug日志, 开启debug会影响性能.
3.清单文件application节点点添加
android:name=".activitys.MyApp"
上面三步走完接下来就可以使用了
先写一个单利类,话不多说上代码
private volatile static XutilsHttp instance;
private Handler handler;
private XutilsHttp()
handler = new Handler(Looper.getMainLooper());
/**
* 单利模式
* @return
*/
public static XutilsHttp getInstance()
if (instance == null)
synchronized (XutilsHttp.class)
if (instance == null)
instance = new XutilsHttp();
return instance;
写好接口
//接口回调
public interface XCallBack
void onResponse(String result);
void onFail(String result);
//下载的接口回调
public interface XDownLoadCallBack
void onstart();
void onLoading(long total,long current,boolean isDownloading);
void onSuccess(File result);
void onFail(String result);
void onFinished();
封装普通get请求
/**
* 普通get请求
* @param url
* @param maps
* @param callback
*/
public void get(String url, Map<String,String> maps, final XCallBack callback)
RequestParams params = new RequestParams(url);
if (null != maps && !maps.isEmpty())
for (Map.Entry<String,String> entry : maps.entrySet())
params.addQueryStringParameter(entry.getKey(),entry.getValue());
x.http().get(params, new Callback.CommonCallback<String>()
private boolean hasError = false;
private String result = null;
@Override
public void onSuccess(String result)
if (result != null)
this.result = result;
@Override
public void onError(Throwable ex, boolean isOnCallback)
hasError = true;
Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();
@Override
public void onCancelled(CancelledException cex)
@Override
public void onFinished()
if (!hasError && result != null)
onSuccessResponse(result,callback);
);
带缓存的get请求
/**
* 带缓存数据的异步get请求
* @param url
* @param maps
* @param ifCache 是否缓存
* @param cacheTime 缓存存活时间
* @param callback
*/
public void getCache(String url,Map<String,String> maps,final boolean ifCache,long cacheTime,final XCallBack callback)
RequestParams params = new RequestParams(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, new Callback.CacheCallback<String>()
private boolean hasError = false;
private String result = null;
@Override
public boolean onCache(String result)
if (ifCache && null != result)
this.result = result;
// true: 信任缓存数据, 不在发起网络请求; false不信任缓存数据.
return ifCache;
@Override
public void onSuccess(String result)
if (result != null)
this.result = result;
@Override
public void onError(Throwable ex, boolean isOnCallback)
hasError = true;
Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();
@Override
public void onCancelled(CancelledException cex)
@Override
public void onFinished()
if (!hasError && result != null)
onSuccessResponse(result,callback);
);
普通post请求
/**
* 异步post请求
* @param url
* @param maps
* @param callback
*/
public void post(String url, Map<String,String> maps, final XCallBack callback)
RequestParams params = new RequestParams(url);
if (null != maps && !maps.isEmpty())
for (Map.Entry<String,String> entry : maps.entrySet())
params.addBodyParameter(entry.getKey(),entry.getValue());
x.http().post(params, new Callback.CommonCallback<String>()
private boolean hasError = false;
private String result = null;
@Override
public void onSuccess(String result)
if (result != null)
this.result = result;
@Override
public void onError(Throwable ex, boolean isOnCallback)
hasError = true;
onFailResponse(ex.getMessage(),callback);
@Override
public void onCancelled(CancelledException cex)
@Override
public void onFinished()
if (!hasError && result != null)
onSuccessResponse(result,callback);
);
带缓存的post请求
/**
* 带缓存数据的异步post请求
* @param url
* @param maps
* @param ifCache 是否缓存
* @param cacheTime 缓存存活时间
* @param callback
*/
public void postCache(String url,Map<String,String> maps,final boolean ifCache,long cacheTime,final XCallBack callback)
RequestParams params = new RequestParams(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().post(params, new Callback.CacheCallback<String>()
private boolean hasError = false;
private String result = null;
@Override
public boolean onCache(String result)
if (ifCache && null != result)
this.result = result;
// true: 信任缓存数据, 不在发起网络请求; false不信任缓存数据.
return ifCache;
@Override
public void onSuccess(String result)
if (result != null)
this.result = result;
@Override
public void onError(Throwable ex, boolean isOnCallback)
hasError = true;
Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();
@Override
public void onCancelled(CancelledException cex)
@Override
public void onFinished()
if (!hasError && result != null)
onSuccessResponse(result,callback);
);
文件的下载
/**
* 下载文件
* @param url
* @param filePath
* @param callback
*/
public void downFile(String url, String filePath, final XDownLoadCallBack callback)
RequestParams params = new RequestParams(url);
params.setSaveFilePath(filePath);
params.setAutoRename(true);
x.http().get(params, new Callback.ProgressCallback<File>()
@Override
public void onSuccess(final File result)
//下载完成会走该方法
handler.post(new Runnable()
@Override
public void run()
if (callback!=null)
callback.onSuccess(result);
);
@Override
public void onError(final Throwable ex, boolean isOnCallback)
handler.post(new Runnable()
@Override
public void run()
if (null != callback)
callback.onFail(ex.getMessage());
);
@Override
public void onCancelled(CancelledException cex)
@Override
public void onFinished()
handler.post(new Runnable()
@Override
public void run()
if (callback!=null)
callback.onFinished();
);
//网络请求之前回调
@Override
public void onWaiting()
//网络请求开始的时候回调
@Override
public void onStarted()
handler.post(new Runnable()
@Override
public void run()
if (null != callback)
callback.onstart();
);
//下载的时候不断回调的方法
@Override
public void onLoading(final long total, final long current, final boolean isDownloading)
//当前进度和文件总大小
handler.post(new Runnable()
@Override
public void run()
if (callback!=null)
callback.onLoading(total,current,isDownloading);
);
);
文件的上传
/**
* 文件上传
*
* @param url
* @param maps
* @param file
* @param callback
*/
public void upLoadFile(String url, Map<String, String> maps, Map<String, File> file, final XCallBack callback)
RequestParams params = new RequestParams(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, new Callback.CommonCallback<String>()
@Override
public void onSuccess(String result)
onSuccessResponse(result, callback);
@Override
public void onError(Throwable ex, boolean isOnCallback)
@Override
public void onCancelled(CancelledException cex)
@Override
public void onFinished()
);
上传Json字符串到服务器
/**
* 上传Json串到服务器
* @param url
* @param maps 将需要传的各个参数放在Map集合里面
*/
public void upLoadJson(String url, Map<String, String> maps, final XCallBack callback)
JSONObject js_request = new JSONObject();//服务器需要传参的json对象
try
for (Map.Entry<String,String> entry : maps.entrySet())
js_request.put(entry.getKey(),entry.getValue());
catch (JSONException e)
e.printStackTrace();
RequestParams params = new RequestParams(url);
params.setAsJsonContent(true);
params.setBodyContent(js_request.toString());
x.http().post(params, new Callback.CommonCallback<String>() //发起传参为json的post请求,
// Callback.CacheCallback<String>的泛型为后台返回数据的类型,
// 根据实际需求更改
private boolean hasError = false;
private String result = null;
@Override
public void onSuccess(String result)
if (result != null)
this.result = result;
@Override
public void onError(Throwable ex, boolean isOnCallback)
ex.printStackTrace();
@Override
public void onCancelled(CancelledException cex)
@Override
public void onFinished()
if (!hasError && result != null && callback!=null)
onSuccessResponse(result,callback);
);
使用案例:
下载调用:
XutilsHttp.getInstance().downFile(url, Utils.getSDPath() + "/" + "ShopBox_Guide_Video/" + Utils.getFileName(url), new XutilsHttp.XDownLoadCallBack()
@Override
public void onstart()
showDialog(DIALOG_DOWNLOAD_PROGRESS);
@Override
public void onLoading(long total, long current, boolean isDownloading)
//当前进度和文件总大小
mProgressDialog.setMax((int) total);
mProgressDialog.setProgress((int) current);
@Override
public void onSuccess(File result)
//下载完成会走该方法
playMedia(result.getPath());
@Override
public void onFail(String result)
Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
@Override
public void onFinished()
dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
);
带缓存get请求
XutilsHttp.getInstance().postCache(url, null, true, 60000, new XutilsHttp.XCallBack()
@Override
public void onResponse(String result)
// 成功获取数据
@Override
public void onFail(String result)
Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
);
就是这么简单,不足之处请大家多多指点
以上是关于Xutils3网络请求的封装的主要内容,如果未能解决你的问题,请参考以下文章