android xutils json请求,Android Xutils3网络请求的封装详解及实例代码

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 maps, final XCallBack callback){

RequestParams params = new RequestParams(url);

if (null != maps && !maps.isEmpty()){

for (Map.Entry entry : maps.entrySet()){

params.addQueryStringParameter(entry.getKey(),entry.getValue());

}

}

x.http().get(params, new Callback.CommonCallback() {

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 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 entry : maps.entrySet()){

params.addQueryStringParameter(entry.getKey(),entry.getValue());

}

}

x.http().get(params, new Callback.CacheCallback() {

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 maps, final XCallBack callback){

RequestParams params = new RequestParams(url);

if (null != maps && !maps.isEmpty()){

for (Map.Entry entry : maps.entrySet()){

params.addBodyParameter(entry.getKey(),entry.getValue());

}

}

x.http().post(params, new Callback.CommonCallback() {

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 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 entry : maps.entrySet()){

params.addBodyParameter(entry.getKey(),entry.getValue());

}

}

x.http().get(params, new Callback.CacheCallback() {

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() {

@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 maps, Map file, final XCallBack callback) {

RequestParams params = new RequestParams(url);

if (maps != null && !maps.isEmpty()) {

for (Map.Entry entry : maps.entrySet()) {

params.addBodyParameter(entry.getKey(), entry.getValue());

}

}

if (file != null) {

for (Map.Entry entry : file.entrySet()) {

params.addBodyParameter(entry.getKey(), entry.getValue().getAbsoluteFile());

}

}

// 有上传文件时使用multipart表单, 否则上传原始文件流.

params.setMultipart(true);

x.http().post(params, new Callback.CommonCallback() {

@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 maps, final XCallBack callback){

JSONObject js_request = new JSONObject();//服务器需要传参的json对象

try {

for (Map.Entry 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() {//发起传参为json的post请求,

// Callback.CacheCallback的泛型为后台返回数据的类型,

// 根据实际需求更改

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();

}

});

就是这么简单,不足之处请大家多多指点

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值