Android-网络通信框架Volley使用详解

71 篇文章 0 订阅
45 篇文章 0 订阅

1 Volley发送get请求:

public void getJson() {
    String url = "http://"+host+":8080/web/json.jsp?username=xjs&password=123456";
    mQueue.add(new JsonObjectRequest(Method.GET, url, null,
        new Listener<jsonobject>() {
            @Override
            public void onResponse(JSONObject response) {
                Log.e(TAG, "response : " + response.toString());
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                String err = error.getMessage();
                Log.e(TAG, "err : " + err);
            }
        }));
}
</jsonobject>

2 Volley发送post请求:

public void postJson() {
    String url = "http://"+host+":8080/web/json.jsp";
    StringRequest postRequest = new StringRequest(
            Request.Method.POST, 
            url,
            new Response.Listener<string>() {
                @Override
                public void onResponse(String response) {
                    // response
                    Log.d("Response", response);
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    // error
                    Log.d("Error.Response", error.getMessage());
                }
            }) {
        @Override
        protected Map<string, string=""> getParams() {
            Map<string, string=""> params = new HashMap<string, string="">();
            params.put("username", "xjs");
            params.put("password", "123456");
            return params;
        }
    };
    mQueue.add(postRequest);
}</string,></string,></string,></string>

3 Volley获取网络图片:

public void getImage() {
    String imageUrl = "http://"+host+":8080/web/image.jsp";
    NetworkImageView view = (NetworkImageView) findViewById(R.id.network_image_view);
    view.setDefaultImageResId(android.R.drawable.ic_menu_rotate); 
    view.setErrorImageResId(android.R.drawable.ic_delete); 
    view.setImageUrl(imageUrl, new ImageLoader(mQueue, new BitmapLruCache(1024 * 4)));
}

4 Volley发送Https请求,需要修改 源码

protected HttpURLConnection createConnection(URL url) throws IOException {
    if (url.toString().toLowerCase(Locale.CHINA).startsWith("https")) {
        HTTPSTrustManager.allowAllSSL();
    }
    return (HttpURLConnection) url.openConnection();
}
//HTTPSTrustManager.java:
public class HTTPSTrustManager implements X509TrustManager {
    private static TrustManager[] trustManagers;
    private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[] {};
    @Override
    public void checkClientTrusted(
            java.security.cert.X509Certificate[] x509Certificates, String s)
            throws java.security.cert.CertificateException {
        // To change body of implemented methods use File | Settings | File
        // Templates.
    }
    @Override
    public void checkServerTrusted(
            java.security.cert.X509Certificate[] x509Certificates, String s)
            throws java.security.cert.CertificateException {
        // To change body of implemented methods use File | Settings | File
        // Templates.
    }
    public boolean isClientTrusted(X509Certificate[] chain) {
        return true;
    }
    public boolean isServerTrusted(X509Certificate[] chain) {
        return true;
    }
    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return _AcceptedIssuers;
    }
    public static void allowAllSSL() {
        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
            @Override
            public boolean verify(String arg0, SSLSession arg1) {
                // TODO Auto-generated method stub
                return true;
            }
        });
        SSLContext context = null;
        if (trustManagers == null) {
            trustManagers = new TrustManager[] { new HTTPSTrustManager() };
        }
        try {
            context = SSLContext.getInstance("TLS");
            context.init(null, trustManagers, new SecureRandom());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
        HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
    }
}

5 Volley获取服务端返回的cookie,需要修改源码:

@Override
public HttpResponse performRequest(Request<!--?--> request,Map<string, string=""> additionalHeaders) 
    throws IOException,AuthFailureError {
    for (Entry<string, list<string="">> header : connection.getHeaderFields().entrySet()) {
    if (header.getKey() != null) {
        String key = header.getKey();
        List<string> values = header.getValue();
        if(key.equalsIgnoreCase("set-cookie")){
            StringBuilder cookieString = new StringBuilder();
            for(String value : values){
                cookieString.append(value).append("\n");//用\n作为分隔符,cookie中不应该有回车符号
            }
            cookieString.deleteCharAt(cookieString.length() - 1);
            Header h = new BasicHeader(header.getKey(), cookieString.toString());
            response.addHeader(h);
        }else{
            Header h = new BasicHeader(header.getKey(), values.get(0));
            response.addHeader(h);
        }
    }
}
}
//然后再request中重写parseNetworkResponse():
@Override
protected Response<string> parseNetworkResponse(NetworkResponse response) {
    Response<string> superResponse = super.parseNetworkResponse(response);
    Map<string, string=""> responseHeaders = response.headers;
    String rawCookies = responseHeaders.get("Set-Cookie");
    //服务端返回是 set-cookie:JSESSIONID=D90B58454550B4D37C4B66A76BF27B93; Path=/otn BIGipServerotn=2564030730.64545.0000; path=/
    String part1 = substring(rawCookies, "", ";");
    String part2 = substring(rawCookies, "\n", ";");
    //客户端需要的是 cookie:JSESSIONID=D90B58454550B4D37C4B66A76BF27B93; BIGipServerotn=2564030730.64545.0000;
    cookies = part1 + "; " + part2 + ";";
    return superResponse;
}
</string,></string></string></string></string,></string,>

6 Volley发请求的时候上传cookie,在request中重写getHeaders():

@Override
public Map<string, string="">getHeaders() throws AuthFailureError {
         if(cookies!= null && cookies.length() > 0){
                   HashMap<string,string>         headers = newHashMap<string, string="">();
                   headers.put("Cookie",cookies);
                   returnheaders;
         }
         returnsuper.getHeaders();
}
</string,></string,string></string,>

7 Volley自定义request:

public class ByteArrayRequest extends Request<byte[]>{
    private final Listener<byte[]> mListener;
    public ByteArrayRequest(int method, String url, Listener<byte[]> listener, ErrorListener errlistener) {
        super(method, url, errlistener);
        mListener = listener;
    }
    @Override
    protected Response<byte[]> parseNetworkResponse(NetworkResponse response) {
        if(response == null){
            return null;
        }
        if(response.statusCode != HttpStatus.SC_OK){
            return null;
        }
        byte[] bytes = response.data;
        return Response.success(bytes, null);
    }
    @Override
    protected void deliverResponse(byte[] response) {
        if(mListener != null){
            mListener.onResponse(response);
        }
    }
}
</byte[]></byte[]></byte[]></byte[]>

8 Volley设置请求超时时间:

@Override
public RetryPolicy getRetryPolicy() { 
         RetryPolicyretryPolicy = new DefaultRetryPolicy(5000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); 
         returnretryPolicy; 
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值