xutils使用流程

1、添加依赖:

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"

4、xutilshttp

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

5、写好接口

//接口回调
 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();
 }

6、 封装普通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);
      }
    }
  });
}

7、带缓存的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);
       }
     }
   });
 }

8、普通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);
       }
     }
   });
 }

9、带缓存的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;
    @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);
      }
    }
  });
}

10、文件的下载

/**
 * 下载文件
 * @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);
          }
        }
      });
    }
  });
}

11、文件的上传

/**
 * 文件上传
 *
 * @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() {
 
    }
  });
 
}

12、上传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);
      }
    }
  });
 
}

13、下载调用:

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

14、带缓存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();
   }
 });

简单简易封装!!!!

猜你喜欢

转载自blog.csdn.net/chehec2010/article/details/87780710