volley 框架简易封装使用

给自己留个记录 仅仅是请求数据的

import android.app.Dialog;
import android.content.Context;
import android.util.Log;

import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.Response;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.mohism.jiayouchina.JiaYouApplication;

import java.util.Map;

import utils.GsonUtil;
import utils.StringUtil;

/**
 * @author liugongce
 */
public class HttpSender {
    private String mRequestUrl = "";
    private OnHttpResListener onHttpResListener;// 回调接口
    private String name = "http请求描述";// 请求描述
    private Object mRequestObj = null;
    private String firstCharForGetRequest = "?";
    private boolean isShowDialog;
    private Dialog dialog;
    private Context context;
    private String encoding ;
    public int connectTimeOut = 20 * 1000;
    private String tag;
    private MyStringRequest request = null;
    private Map<String, String> map;
    private int what;//给线程加标记
    // -------------------------------------------构造函数--------------------------------------------------------

    private HttpSender(Builder builder) {
        this.mRequestUrl = builder.mRequestUrl;
        this.onHttpResListener = builder.onHttpResListener;
        this.name = builder.name;
        this.mRequestObj = builder.mRequestObj;
        this.isShowDialog = builder.isShowDialog;
        this.context = builder.context;
        this.connectTimeOut = builder.connectTimeOut;
        this.encoding=builder.enCoding;
        this.what=builder.what;
        this.dialog=builder.dialog;
        this.tag = (builder.tag == null || builder.tag.equals("")) ? "abctag" : tag;
    }

    // -------------------------------------------------公开调用方法------------------------------------------

    /**
     * post请求
     */
    public void sendPost() {
        if(NetUtils.isNetworkConnected(context)) {
            request(0);
        }else{
            if (onHttpResListener != null) {
                onHttpResListener.noInternet();
            }
        }
    }

    /**
     * get请求
     */
    public void sendGet() {
        if(NetUtils.isNetworkConnected(context)) {//如果有网络
            request(1);
        }else {
            if (onHttpResListener != null) {
                onHttpResListener.noInternet();
            }
        }
    }
    // --------------------------------------------回调操作------------------------------------------------

    /**
     * 请求成功回调
     */
    private Response.Listener<String> succListener = response -> {
        dismissDialog();
        if (onHttpResListener != null) {
            onHttpResListener.doSuccess(response,what);
        }
    };
    /**
     * 请求失败的回调
     */
    private Response.ErrorListener errListener = error -> {
        dismissDialog();
        if (onHttpResListener != null) {
            onHttpResListener.otherError(error,what);
        }
    };

    // ------------------------------------------------请求操作----------------------------------------------
    private void request(int method) {
        if (StringUtil.isBlank(mRequestUrl)) {
            Log.i("Info", name + "POST请求 Url为空");
            return;
        }
        if (mRequestObj != null) {
            String json = GsonUtil.getInstance().toJson(mRequestObj);
            map = new Gson().fromJson(json, new TypeToken<Map<String, String>>() {
            }.getType());
        }
        if (method == 0) {//post请求

            request = new MyStringRequest(com.android.volley.Request.Method.POST, mRequestUrl, succListener, errListener,encoding) {
                @Override
                protected Map<String, String> getParams() {
                    return map;
                }
            };
            Log.i("Info", "POST请求名称: " + name + "POST请求Url: "
                    + mRequestUrl.toString());
                if(map!=null) {
                    for (Map.Entry<String, String> entry : map.entrySet()) {
                        String key = entry.getKey().trim();
                        String value = entry.getValue().toString().trim();
                        Log.i("Info", "POST提交参数: " + key + " = " + value);//打印信息
                    }
                }
        } else {//get请求
            StringBuilder sb = new StringBuilder(mRequestUrl);
            if (mRequestUrl.contains("?")) {
                firstCharForGetRequest = "&";
            }
            sb.append(firstCharForGetRequest);
            if(map!=null) {
                for (Map.Entry<String, String> entry : map.entrySet()) {
                    String key = entry.getKey().trim();
                    String value = entry.getValue().toString().trim();
                    sb.append(key + "=" + value.toString());
                    sb.append("&");
                }
                sb.deleteCharAt(sb.length() - 1);
            }
            request = new MyStringRequest(Request.Method.GET, sb.toString(), succListener, errListener,encoding);
            Log.i("Info", "GET请求名称: " + name + "GET请求Url: " + sb.toString());//打印信息
        }
        request.setRetryPolicy(new DefaultRetryPolicy(connectTimeOut, 1, 1.0f));//设置请连接超时时间
        request.setTag(tag);
        JiaYouApplication.mInstance.getRequestQueue().add(request);
        showDialog();
    }

    /**
     * 显示等待对话框
     */
    public void showDialog() {
        try {
            if (!isShowDialog) {
                return;
            }
            if(dialog!=null&&!dialog.isShowing()){
                dialog.show();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 关闭等待对话框
     */
    public void dismissDialog() {
        try {
            if (dialog != null && dialog.isShowing())
                dialog.dismiss();
        } catch (Exception e) {
        }
    }

    public static class Builder {
        private String mRequestUrl = "";
        private OnHttpResListener onHttpResListener;// 回调接口
        private String name = "http请求描述";// 请求描述
        private Object mRequestObj = null;
        private boolean isShowDialog;
        private Context context;
        private String enCoding="UTF-8";
        public int connectTimeOut = 20 * 1000;
        private String tag;
        private int what=-1;
        private Dialog dialog;
        public  Builder(Context context){
            this.context=context;
        }
        /**
         * @param mRequestUrl 请求地址
         * @return
         */
        public Builder setRequestUrl(String mRequestUrl) {
            this.mRequestUrl = mRequestUrl;
            return this;
        }

        /**
         * 请求接口标记
         *
         * @param name
         * @return
         */
        public Builder setRequestName(String name) {
            this.name = name;
            return this;
        }

        /**
         * @param mRequestObj 参数(可以是实体类对象,也可以是一个Map对象)
         * @return
         */
        public Builder setRequestParams(Object mRequestObj) {
            this.mRequestObj = mRequestObj;
            return this;
        }
        /**
         * @param connectTimeOut 设置连接超时时间
         * @return
         */
        public Builder setConnectTimeOut(int connectTimeOut) {
            this.connectTimeOut = connectTimeOut;
            return this;
        }

        /**
         * @param tag 设置标签,对请求进行标记
         * @return
         */
        public Builder setRequestTag(String tag) {
            this.tag = tag;
            return this;
        }

        /**
         * @return 设置请求编码 默认UTF-8
         */
        public Builder setRequestEncoding(String enCoding){
            this.enCoding=enCoding;
            return this;
        }
        /**
         * @param onHttpResListener 设置回调监听
         * @return
         */
        public Builder setOnHttpListener(OnHttpResListener onHttpResListener) {
            this.onHttpResListener = onHttpResListener;
            return this;
        }

        /**
         * @param dialog 设置想要显示的弹出框
         * @return
         */
        public Builder setDialog(Dialog dialog){
            this.dialog=dialog;
            return this;
        }
        /**
         * @param what 给每个请求打上标记,为了区分在同一个页面中的多个请求
         * @return
         */
        public Builder setWhat(int what){
            this.what=what;
            return  this;
        }
        /**
         * @return 返回一个请求对象
         */
        public HttpSender build() {
            return new HttpSender(this);
        }

    }
}

调用方法

 getBaseMapWithUid();
        baseMap.put("p", p + "");
        baseMap.put("nums", nums + "");
        baseMap.put("status", status + "");
        new HttpSender.Builder(getActivity())
                .setRequestUrl(Urls.GetUserOrder)
                .setRequestParams(baseMap)
                .setRequestName("获取订单")
                .setWhat(0x123)
                .setRequestTag("OrderRequest")
                .setOnHttpListener(new OnHttpResListenerIml() {
                    @Override
                    public void doSuccess(String data, int what) {
                     //请求成功处理代码       

                    }
                }).build().sendPost();            
时间: 2024-11-18 02:24:00

volley 框架简易封装使用的相关文章

Android之Volley框架源码分析

临近毕业,各种事情各种忙.我也没有认真专注写过博客,最近仔细看了Volley框架的使用及其源码,思前想后,想挑战一下自己,还是写一篇博客来分享,如有错误,欢迎吐槽. Volley简介 网络请求是一个App很重要的一部分,android系统只是提供了一个平台,而android应用则是基于这个平台上进行展示数据,起到与用户进行交互的作用,数据来源于服务端,而二者之间必须通过互联网进行传输数据,在Android系统发布初期,很多开发者都是在Apache协会的Http协议的基础上进行网络请求方法的封装,

Volley框架源码浅析(一)

尊重原创http://blog.csdn.net/yuanzeyao/article/details/25837897 从今天开始,我打算为大家呈现关于Volley框架的源码分析的文章,Volley框架是Google在2013年发布的,主要用于实现频繁而且粒度比较细小的Http请求,在此之前Android中进行Http请求通常是使用HttpUrlConnection和HttpClient进行,但是使用起来非常麻烦,而且效率比较地下,我想谷歌正式基于此种原因发布了Volley框架,其实出了Voll

Volley框架源码浅析(二)

尊重原创 http://write.blog.csdn.net/postedit/25921795 在前面的一片文章Volley框架浅析(一)中我们知道在RequestQueue这个类中,有两个队列:本地队列和网络队列 /** The cache triage queue. */ private final PriorityBlockingQueue<Request<?>> mCacheQueue = new PriorityBlockingQueue<Request<

Volley框架

Volley框架 volley是谷歌官方在2013年推出的Android平台上的网络通信库 特点 网络通信更快,更简单,开发效率高,稳定性高. 对get和post网络请求以及网络图片高效的异步处理请求. 可以对网络请求进行优先级排序处理. 网络请求的缓存. 多级别取消请求. 和Activity生命周期的联动. 缺点不适合数据的上传与下载 Get和Post请求接口的使用请求对象 StringRequest 返回结果类型不确定(它包含后面两种) StringRequest request = new

Volley框架源码分析

Volley框架分析Github链接 Volley框架分析 Volley源码解析 为了学习Volley的网络框架,我在AS中将Volley代码重新撸了一遍,感觉这种照抄代码也是一种挺好的学习方式.再分析Volley源码之前,我们先考虑一下,如果我们自己要设计一个网络请求框架,需要实现哪些事情,有哪些注意事项? 我的总结如下: 需要抽象出request请求类(包括url, params, method等),抽象出request请求类之后,我们可以对其继承从而实现丰富的扩展功能. 需要抽象出resp

安卓中自定义并使用Volley框架请求网络

大家好,今天我们讲一下如何使用Volley框架请求网络,为何要使用Volley框架,这就要先说一下使用Volley框架请求网络的优点了,volley是易于定制的,即你可以根据需求来设定volley框架,还有volley框架支持请求的优先级设定,即你可以自主设定网络请求的优先级,还有就是volley框架请求支持取消单个或多个请求,这个一会设置请求的时候会特别说明,还有它可以自动调度网络请求,至于其他的如代码的健壮性.支持多并发等等就不一一列举了,说了那么多下面就介绍如何自定义并使用Volley框架

Android网络通信Volley框架源码浅析(三)

尊重原创 http://write.blog.csdn.net/postedit/26002961 通过前面浅析(一)和浅析(二)的分析,相信大家对于Volley有了初步的认识,但是如果想更深入的理解,还需要靠大家多多看源码. 这篇文章中我们主要来研究一下使用Volley框架请求大量图片的原理,在Android的应用中,通过http请求获取的数据主要有三类: 1.json 2.xml 3.Image 其中json和xml的获取其实原理很简单,使用Volley获取感觉有点大财小用了,了解Volle

android Volley 框架详解

开发android应用很多时候都要涉及网络操作,Android SDK中提供了HttpClient 和 HttpUrlConnection两种方式用来处理网络操作,但当应用比较复杂的时候需要我们编写大量的代码处理很多东西:图像缓存,请求的调度等等: 而Volley框架就是为解决这些而生的,它与2013年Google I/O大会上被提出:使得Android应用网络操作更方便更快捷:抽象了底层Http Client等实现的细节,让开发者更专注与产生RESTful Request.另外,Volley在

Android网络通信Volley框架源代码浅析(二)

尊重原创 http://write.blog.csdn.net/postedit/25921795 在前面的一片文章Volley框架浅析(一)中我们知道在RequestQueue这个类中,有两个队列:本地队列和网络队列 /** The cache triage queue. */ private final PriorityBlockingQueue<Request<?>> mCacheQueue = new PriorityBlockingQueue<Request<