volley是Android开发团队在2013年Google I/O大会上推出了一个新的网络通信框架。因为公司服务端与android通信采用https协议,android用的访问网络框架就是volley。现在将项目中使用volley访问https的方法记录一下。

1.首先下载volley框架,下载地址http://download.csdn.net/detail/jifashihan/9316875。将volley.jar复制到Android Studio中libs文件夹中,右键点击jar,选择"Add As Library"

2.将需要用到的类下载下来,下载地址http://download.csdn.net/detail/jifashihan/9317813。将.java文件复制到工程中,将.jar文件复制到libs文件夹下,并引用

3.创建一个单例类。

public class VolleySingleton {

    private static VolleySingleton volleySingleton;
    private RequestQueue mRequestQueue;
    private ImageLoader mImageLoader;
    private Context mContext;
    public VolleySingleton(Context context) {
        this.mContext = context;
        mRequestQueue = getRequestQueue();
        mImageLoader = new ImageLoader(mRequestQueue,
                new ImageLoader.ImageCache(){
                    private final LruCache cache = new LruCache(20);
                    @Override
                    public Bitmap getBitmap(String url){
                        return cache.get(url);
                    }
                    @Override
                    public void putBitmap(String url,Bitmap bitmap){
                        cache.put(url,bitmap);
                    }
                });
    }
    public static synchronized VolleySingleton getVolleySingleton(Context context){
        if(volleySingleton == null){
            volleySingleton = new VolleySingleton(context);
        }
        return volleySingleton;
    }
    public RequestQueue getRequestQueue(){
        if(mRequestQueue == null){
            InputStream keyStore =mContext.getResources().openRawResource(R.raw.server);
            mRequestQueue = Volley
                    .newRequestQueue(mContext,
                            new ExtHttpClientStack(new SslHttpClient(keyStore, "123456", 443)));
            //mRequestQueue = Volley.newRequestQueue(mContext.getApplicationContext());
        }
        return mRequestQueue;
    }
    public void addToRequestQueue(Request req){
        getRequestQueue().add(req);
    }
    public ImageLoader getImageLoader() {
        return mImageLoader;
    }
}


其中    InputStream keyStore =mContext.getResources().openRawResource(R.raw.server);是读取raw文件夹下的server.bks,也就是服务端生成的证书。new SslHttpClient(keyStore, "123456", 443),123456是密码,443是端口。

4.创建volley访问网络的通用方法,因为服务器接口是post类型的,所以封装post方法

public class VolleyMethods {
    private String result = "";//访问数据,返回结果
    private Context mContext;
    private RequestQueue mRequestQueue;

    public VolleyMethods(Context context) {
        mContext = context;
        mRequestQueue = VolleySingleton.getVolleySingleton(mContext).getRequestQueue();
    }

    /**
     * Post
     *
     * @param url         访问url
     * @param requestTag    请求Tag,用于停止请求
     * @param paramkeys   Post参数的key
     * @param paramValues Post参数的value
     */
    public void StringRequestPostMethod(String url, String requestTag, final ArrayList paramkeys, final ArrayList paramValues
    ,Response.Listener listener,Response.ErrorListener errorListener) {
        result = "";
        StringRequest stringRequest = new StringRequest(Request.Method.POST, url, listener, errorListener) {
            @Override
            protected Map getParams() throws AuthFailureError {
                Map map = new HashMap();
                for (int i = 0; i < paramkeys.size(); i++) {
                    map.put(paramkeys.get(i), paramValues.get(i));
                }
                return map;
            }
        };

        stringRequest.setTag(requestTag);
        mRequestQueue.add(stringRequest);
    }
}

5.调用volley访问网络

//得到获取验证码接口,返回参数名。StaticParameter.interfaceUrl接口地址,interfaceMethodName接口名称
    public static ArrayList SendCaptchaMethod(){
        interfaceMethodName = StaticParameter.interfaceUrl+"sendCaptcha";
        ArrayList paramkeys = new ArrayList();
        paramkeys.add("phonenumber");
        return paramkeys;
    }

 //调用获取验证码的接口
                    final VolleyMethods volleyMethods = new VolleyMethods(ForgetPasswordActivity.this);
                    ArrayList paramkeys = new ArrayList();
                    ArrayList paramValues = new ArrayList();
                    paramValues.add(userPhone);
                    paramkeys = UrlInterfaceMethods.SendCaptchaMethod();
                    volleyMethods.StringRequestPostMethod(UrlInterfaceMethods.interfaceMethodName,
                            "SendCaptcha", paramkeys, paramValues, new Response.Listener() {
                                @Override
                                public void onResponse(String s) {
                                    Log.e("", s);
                                }
                            }, new Response.ErrorListener() {
                                @Override
                                public void onErrorResponse(VolleyError volleyError) {
                                    Log.e("volleyError", volleyError.toString());
                                }
                            });

参考博客

http://blog.sina.com.cn/s/blog_4b20ae2e0102vpwv.html


更多相关文章

  1. 13. Android MultiMedia框架完全解析 - MediaCodec解析
  2. Android接口安全 - RSA+AES混合加密方案
  3. Android 快速开发框架androidannotations详解
  4. Android 网络框架 android-async-http
  5. android Studio 使用gradle 参数解释及多渠道打包
  6. Android接口定义语言---AIDL(一)
  7. Android程序开发的基本框架
  8. Android与JS交互---内嵌框架iframe

随机推荐

  1. 【iOS】网页中调用JS与JS注入
  2. 使用iTunes把电脑中的视频传到iPhone的方
  3. .9图片的制作(draw9patch.bat工具的使用)
  4. 【第二版】高仿Android网易云音乐企业级
  5. FAQ_17 android string.xml 里面的 %
  6. 转..android 开发的心酸历史
  7. Android(安卓)IMSI和IMEI
  8. Android多渠道打包之Python打包
  9. [置顶] 为学Android,我看了这些书
  10. android视频录制与滤镜(二)——google官方