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 {@Overridepublic 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;@Overridepublic void onSuccess(String result) {if (result != null) {this.result = result;}}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {hasError = true;Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();}@Overridepublic void onCancelled(CancelledException cex) {}@Overridepublic 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;@Overridepublic boolean onCache(String result) {if (ifCache && null != result){this.result = result;}// true: 信任缓存数据, 不在发起网络请求; false不信任缓存数据.return ifCache;}@Overridepublic void onSuccess(String result) {if (result != null) {this.result = result;}}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {hasError = true;Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();}@Overridepublic void onCancelled(CancelledException cex) {}@Overridepublic 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;@Overridepublic void onSuccess(String result) {if (result != null) {this.result = result;}}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {hasError = true;onFailResponse(ex.getMessage(),callback);}@Overridepublic void onCancelled(CancelledException cex) {}@Overridepublic 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().get(params, new Callback.CacheCallback<String>() {private boolean hasError = false;private String result = null;@Overridepublic boolean onCache(String result) {if (ifCache && null != result){this.result = result;}// true: 信任缓存数据, 不在发起网络请求; false不信任缓存数据.return ifCache;}@Overridepublic void onSuccess(String result) {if (result != null) {this.result = result;}}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {hasError = true;Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();}@Overridepublic void onCancelled(CancelledException cex) {}@Overridepublic 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>() {@Overridepublic void onSuccess(final File result) {//下载完成会走该方法handler.post(new Runnable() {@Overridepublic void run() {if (callback!=null){callback.onSuccess(result);}}});}@Overridepublic void onError(final Throwable ex, boolean isOnCallback) {handler.post(new Runnable() {@Overridepublic void run() {if (null != callback){callback.onFail(ex.getMessage());}}});}@Overridepublic void onCancelled(CancelledException cex) {}@Overridepublic void onFinished() {handler.post(new Runnable() {@Overridepublic void run() {if (callback!=null){callback.onFinished();}}});}//网络请求之前回调@Overridepublic void onWaiting() {}//网络请求开始的时候回调@Overridepublic void onStarted() {handler.post(new Runnable() {@Overridepublic void run() {if (null != callback){callback.onstart();}}});}//下载的时候不断回调的方法@Overridepublic void onLoading(final long total, final long current, final boolean isDownloading) {//当前进度和文件总大小handler.post(new Runnable() {@Overridepublic 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>() {@Overridepublic void onSuccess(String result) {onSuccessResponse(result, callback);}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {}@Overridepublic void onCancelled(CancelledException cex) {}@Overridepublic 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;@Overridepublic void onSuccess(String result) {if (result != null) {this.result = result;}}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {ex.printStackTrace();}@Overridepublic void onCancelled(CancelledException cex) {}@Overridepublic 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() {@Overridepublic void onstart() {showDialog(DIALOG_DOWNLOAD_PROGRESS);}@Overridepublic void onLoading(long total, long current, boolean isDownloading) {//当前进度和文件总大小mProgressDialog.setMax((int) total);mProgressDialog.setProgress((int) current);}@Overridepublic void onSuccess(File result) {//下载完成会走该方法playMedia(result.getPath());}@Overridepublic void onFail(String result) {Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();}@Overridepublic void onFinished() {dismissDialog(DIALOG_DOWNLOAD_PROGRESS);}});
带缓存get请求
XutilsHttp.getInstance().postCache(url, null, true, 60000, new XutilsHttp.XCallBack() {@Overridepublic void onResponse(String result) {// 成功获取数据}@Overridepublic void onFail(String result) {Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();}});
就是这么简单,不足之处请大家多多指点
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!