栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

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

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap

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

 Xutils3网络请求的封装详解

封装了一个Xutil3的网络请求工具类,分享给大家,本人水平有限,不足之处欢迎指出。

使用前先配置xutils3:

1.gradle中添加

compile 'org.xutils:xutils:3.3.40'

2.自定义Application


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

  
  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请求

  
  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请求

 
  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请求

 
  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请求

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

文件的下载

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

文件的上传

  
  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字符串到服务器

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://mshxw.com/it/160346.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号