Volly의 간편한 패키지

24762 단어 Androidtool
오늘 간단하게 말하자면 Volly 프레임워크의 간단한 봉인은 요청 헤더, 요청 바디, 요청 방법 등의 간단한 봉인을 포함한다. 이 편은 전편에 호응하고 전편에 호응하여 사용한 것이다.
우선 Volly Bean을 말씀드리자면 모두 get입니다. set은 설명할 것이 없습니다.
import java.util.Map;

/**
 * @author penguinfool
 * Volly     
 */
public class VollyBean {
    int method;
    String url;
    Map headers;
    Map params;

    /**
     *     
     */
    public VollyBean() {
        super();
    }

    /**
     * @param method     
     * @param url     
     * @param headers    
     * @param params     
     */
    public VollyBean(int method, String url, Map headers,
            Map params) {
        super();
        this.method = method;
        this.url = url;
        this.headers = headers;
        this.params = params;
    }

    /**
     * @return     
     */
    public int getMethod() {
        return method;
    }

    /**
     * @param method     
     */
    public void setMethod(int method) {
        this.method = method;
    }

    /**
     * @return     
     */
    public String getUrl() {
        return url;
    }

    /**
     * @param url     
     */
    public void setUrl(String url) {
        this.url = url;
    }

    /**
     * @return    
     */
    public Map getHeaders() {
        return headers;
    }

    /**
     * @param headers    
     */
    public void setHeaders(Map headers) {
        this.headers = headers;
    }

    /**
     * @return     
     */
    public Map getParams() {
        return params;
    }

    /**
     * @param params     
     */
    public void setParams(Map params) {
        this.params = params;
    }

}

Volly Request Manager 클래스, 이 안에 요청을 봉인하는 방법, 요청 일등, 그의 요청 성공과 실패는 모두 Volly 프레임워크에 봉인된 것이다. 우리는 결과를 우리가 필요로 하는 인터페이스로 되돌릴 수 있는 리셋을 사용자 정의할 수 있다
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;

import android.content.Context;

import com.android.volley.AuthFailureError;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request.Method;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.rgsc.base.core.net.NetUtils;

/**
 * @author penguinfool
 *      
 */
public class VollyRequestManager {
    private static final String TAG = "VollyRequestManager";
    private static volatile VollyRequestManager instance = null;
    private RequestQueue mRequestQueue = null;
    private static final int TIMEOUT = 5000;

    /**
     * @param context
     *               
     */
    private VollyRequestManager(Context context) {
        initRequestqueue(context);
    }

    /**
     *    mRequestQueue
     * 
     * @param context
     *               
     */
    public void initRequestqueue(Context context) {
        this.mRequestQueue = Volley.newRequestQueue(context);
    }

    /**
     * @param context
     *               
     * @return   
     */
    public static VollyRequestManager getInstance(Context context) {
        if (null == instance) {
            synchronized (VollyRequestManager.class) {
                if (null == instance) {
                    instance = new VollyRequestManager(context);
                }
            }
        }
        return instance;
    }

    /**
     * @return     
     */
    public RequestQueue getRequestQueue() {
        return this.mRequestQueue;
    }

    /**
     * @param url
     *                
     * @param headers
     *               
     * @param params
     *                
     * @param successListener
     *                
     * @param errorListener
     *                
     * @throws UnsupportedEncodingException
     *               
     */
    private void doGet(String url, final Map headers,
            final Map params,
            Response.Listener successListener,
            Response.ErrorListener errorListener)
            throws UnsupportedEncodingException {

        String requestUrl = null;
        //    GET  ,      URL 
        if (params != null && !params.isEmpty()) {
            String param = urlEncode(params);
            requestUrl = url + "?" + param;
        } else {
            requestUrl = url;
        }
        System.out.println("### volley requet:" + url);

        StringRequest stringRequest = new StringRequest(Method.GET, requestUrl,
                successListener, errorListener) {
            //      
            @Override
            public Map getHeaders() throws AuthFailureError {

                if (headers != null && !headers.isEmpty()) {
                    return headers;
                } else {
                    return Collections.emptyMap();
                }
            }

            //      params  null
            @Override
            protected Map getParams() throws AuthFailureError {
                return params;
            }

        };
        stringRequest.setRetryPolicy(new DefaultRetryPolicy(TIMEOUT,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        mRequestQueue.add(stringRequest);

    }

    /**
     * @param url
     *                
     * @param headers
     *               
     * @param params
     *                
     * @param successListener
     *                
     * @param errorListener
     *                
     */
    private void doPost(String url, final Map headers,
            final Map params,
            Response.Listener successListener,
            Response.ErrorListener errorListener) {

        // L.i(TAG + "doPost", url);

        // for (Map.Entry entry :headers.entrySet()) {
        // System.out.println("hkey= " + entry.getKey() + " and hvalue= " +
        // entry.getValue());
        // }
        //

        //
        // for (Map.Entry entry :params.entrySet()) {
        // System.out.println("pkey= " + entry.getKey() + " and pvalue= " +
        // entry.getValue());
        // }

        StringRequest stringRequest = new StringRequest(Method.POST, url,
                successListener, errorListener) {

            @Override
            protected Map getParams() throws AuthFailureError {
                return params;
            }

            @Override
            public Map getHeaders() throws AuthFailureError {

                if (headers != null && !headers.isEmpty()) {
                    return headers;
                } else {
                    return Collections.emptyMap();
                }

            }

        };
        stringRequest.setRetryPolicy(new DefaultRetryPolicy(TIMEOUT,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        mRequestQueue.add(stringRequest);

    }

    /**
     * @param url
     *                
     * @param headers
     *               
     * @param params
     *                
     * @param successListener
     *                
     * @param errorListener
     *                
     * @throws Exception
     *               
     */
    private void doPut(String url, final Map headers,
            final Map params,
            Response.Listener successListener,
            Response.ErrorListener errorListener) {

        String requestUrl = null;
        /*
         * if (params != null && !params.isEmpty()) { String param =
         * urlEncode(params); requestUrl = url + "?" + param; } else {
         * requestUrl = url; } L.i(TAG, requestUrl);
         */
        StringRequest stringRequest = new StringRequest(Method.PUT, url,
                successListener, errorListener) {
            //      
            @Override
            public Map getHeaders() throws AuthFailureError {

                if (headers != null && !headers.isEmpty()) {
                    return headers;
                } else {
                    return Collections.emptyMap();
                }
            }

            @Override
            protected Map getParams() throws AuthFailureError {
                return params;
            }

        };
        stringRequest.setRetryPolicy(new DefaultRetryPolicy(TIMEOUT,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        mRequestQueue.add(stringRequest);

    }

    /**
     *   ,     
     */
    private void doDelete() {
        // .......
    }

    /**
     * @param vollyBean
     *              bean
     * @param successListener
     *                
     * @param errorListener
     *                
     * @throws UnsupportedEncodingException
     *               
     */
    public void request(VollyBean vollyBean,
            Response.Listener successListener,
            Response.ErrorListener errorListener)
            throws UnsupportedEncodingException {

        if (NetUtils.isAvailable()) {

            switch (vollyBean.getMethod()) {

            case Method.GET:
                doGet(vollyBean.getUrl(), vollyBean.getHeaders(),
                        vollyBean.getParams(), successListener, errorListener);
                break;

            case Method.POST:

                doPost(vollyBean.getUrl(), vollyBean.getHeaders(),
                        vollyBean.getParams(), successListener, errorListener);

                break;

            case Method.PUT:
                doPut(vollyBean.getUrl(), vollyBean.getHeaders(),
                        vollyBean.getParams(), successListener, errorListener);

                break;

            case Method.DELETE:

                doDelete();
                break;

            default:
                break;
            }
        } else {
            errorListener.onErrorResponse(null);
        }
    }

    /**
     * @param params
     *                
     * @return   urlEncode      
     * @throws UnsupportedEncodingException
     *               
     */
    private String urlEncode(Map params)
            throws UnsupportedEncodingException {
        Iterator iter = params.keySet().iterator();
        int i = 0;
        StringBuffer sb = new StringBuffer();

        while (iter.hasNext()) {
            String key = iter.next();
            String value = params.get(key);

            if (i != 0) {
                sb.append("&");
            }
            sb.append(key);
            sb.append("=");
            sb.append(URLEncoder.encode(value, "utf-8").toString());

            i++;
        }
        return sb.toString();
    }
}
/**
 * 
 **/
public class VollyBeanFactory {
    private static VollyBeanFactory instance = new VollyBeanFactory();

    /**
     *       
     */
    private VollyBeanFactory() {

    }

    /**
     * @return   
     */
    public static VollyBeanFactory getInstance() {
        if (instance == null) {
            synchronized (VollyBeanFactory.class) {
                instance = new VollyBeanFactory();
            }
        }
        return instance;
    }

    /**
     * @param username
     *               
     * @param pwd
     *              
     * @return   bean
     */
    public VollyBean getLoginBean(String username, String pwd) {
        Map params = new HashMap();
        params.put(Constant.HTTP_PARAM_USERNAME, username);
        params.put(Constant.HTTP_PARAM_PWD, pwd);
        VollyBean vollyBean = new VollyBean();
        vollyBean.setMethod(Method.POST);//       
        SLog.console("    :" + ServerConfig.getInstance().getServerUrl());
        vollyBean.setUrl(ServerConfig.getInstance().getServerUrl()); //       
        Map header = new HashMap();
        header.put("Content-Type", "application/x-www-form-urldecoded");
        vollyBean.setHeaders(header); //      
        vollyBean.setParams(params); //       
        return vollyBean;
    }
}

다음은 실제 호출을 보도록 하겠습니다.
public void log(String username, String pwd,
            Response.Listener<String> successListener,
            Response.ErrorListener errorListener)
            throws UnsupportedEncodingException {
        VollyBean bean = VollyBeanFactory.getInstance().getLoginBean(username,
                pwd);
        man.request(bean, successListener, errorListener);
    }

Volly는 기본적으로 이렇습니다. 주의하세요. Volly는jar백이 있으니 인터넷에서 아무거나 다운로드하면 됩니다.

좋은 웹페이지 즐겨찾기