NoHttp的使用以及封装

上一篇写到OkHttp,简单的对比了下咱们安卓开发中用到的网络框架,到了android 6.0也不会支持volley了,所以了解并学习新的框架是非常有必要的,

  • 先看看NoHttp的特性 1:
    1.多种请求方式并发,调用,支持get,post,等网络解析方式
    2.文件上传,文件下载,下载进度回调,错误回调
    3.支持取消某个请求,取消指定多个请求,取消所有请求
    4.支持自定义Request,利用NoHttp泛型可以解析成你想要的任何数据格式(String,Json,JavaBean等)
  • 先看看NoHttp的特性 2:
    1.支持请求String,Json,FastJson,Gson,Bitmap,JavaBean,XML等扩展。异步请求。拿到结果直接更新UI,支持同步请球。
    2.大文件上传不会发生OOM。支持File,InputStream,Bitmap,实现NoHttp的binary接口,一般情况任何东西都可以传。
    3.文件下载,支持多个文件同时下载,并且有进度回调,错误回调,支持暂停继续下载,支持取消下载
  • NoHttp的基本使用
· 在studio中进行依赖关联,在application中实现初始化,并添加相应的权限
compile 'com.yolanda.nohttp:nohttp:1.0.4'
在Application中onCreate的进行    NoHttp.initialize(this);





新建一个队列用来添加消息请求,可以并发(一起发送,一起请求)多个消息请求,默认为3个
发送消息请求,并添加到队列中
设置结果回调监听,对请求结果进行统一处理
[跟volley还是有点相似的]

  • GET,POST简单请求实例
GET:
public void getNohttp(View view) {
    RequestQueue requestQueue = NoHttp.newRequestQueue();
    final Request request = NoHttp.createStringRequest("https://www.baidu.com/",
      RequestMethod.GET);
    /**
     *  what:请求的标识
     *  request:请求
     *  response:请求的回调监听
     */
    requestQueue.add(0, request, new OnResponseListener() {
        @Override
        public void onStart(int what) {
        }
        @Override
        public void onSucceed(int what, Response response) {
            contenttv.setText(response.get());
        }
        @Override
        public void onFailed(int what, String url, Object tag, Exception exception, int
           responseCode, long networkMillis) {
        }
        @Override
        public void onFinish(int what) {
        }
    });
}
POST:
    POST请求就是在创建消息请求的时候把RequestMethod.GET换成RequestMethod.POST
    然后
    request.add("username", "admin");
    request.add("password", "123456");
    当然也可以添加头部
    request.addHeader("xxid","123456abc");
    request.addHeader("xxkey","123456abc");
 XML就是两个button按钮和textview显示返回的网络数据

也可以参考这个

  • 以下NoHttp简单的封装,方便在项目中使用
/**
   * Created  Lukey on 2016/8/20
   */
public class NoHttpManager implements OnResponseListener {
    private NoHttpListener mListener;
    private boolean isLoading;
    private Request mRequest;
    private Dialog mWaitDialog;
    public NoHttpManager(Context context, Request request, NoHttpListener
 httpListener, boolean canCancle, boolean isLoading) {
        mListener = httpListener;
        this.isLoading = isLoading;
        this.mRequest = request;
        if (context != null) {
            mWaitDialog = new SpotsDialog(context,"正在加载中...");
            mWaitDialog.setCancelable(canCancle);
        }
    }
    @Override
    public void onStart(int what) {
        if (isLoading && mWaitDialog != null && !mWaitDialog.isShowing()) {
            mWaitDialog.show();
        }
    }
    @Override
    public void onSucceed(int what, Response response) {
        if (mListener != null) {
            mListener.onSucceed(what, response);
        }
    }
    @Override
    public void onFailed(int what, String url, Object tag, Exception exception, int
 responseCode, long networkMillis) {
        if (mListener != null) {
            mListener.onFailed(what, url, tag, exception, responseCode, networkMillis);
        }
    }
    @Override    public void onFinish(int what) {
        if (isLoading && mWaitDialog != null && mWaitDialog.isShowing()) {
            mWaitDialog.cancel();
        }
   }}
/**
 * Created  Lukey on 2016/8/20
 * 定义一个NoHttpListener接口,只需要定义成功和失败
 */
public interface NoHttpListener {
    void onSucceed(int what, Response response);
    void onFailed(int what, String url, Object tag, Exception exception, int responseCode, long networkMillis);}
/**
 * Created  Lukey on 2016/8/20
 * 单例模式 -- 提供外部调用进行网络请求
 */
public class NoHttpCallBack {
    //单例模式
    private final RequestQueue mQueue;
    private static NoHttpCallBack callService;
    private NoHttpCallBack() {
        mQueue = NoHttp.newRequestQueue();
    }
    public synchronized static NoHttpCallBack getInstance() {
        if (callService == null) {
            callService = new NoHttpCallBack();
        }
        return callService;
    }
    /**
     * 添加一个请求到队列中的
     */
    public  void add(Context context, int what, Request request,
                        NoHttpListener httpListener, Boolean canCanclem, Boolean
            isLoading){
        mQueue.add(what,request,new NoHttpManager(context,request,
           httpListener,canCanclem,isLoading));
    }}
效果图
NoHttp的使用以及封装_第1张图片
nohttp.gif

上面是简单的对NoHttp网络请求框架进行轻量级的封装,后期还会进行持续维护

你可能感兴趣的:(NoHttp的使用以及封装)