公司的項目,爲防止機器註冊,需增長驗證碼功能,開始覺得只是一張圖片,經過glide加載個地址就好,但接口的同事說驗證碼接口是返回一個流,由於服務端不該該作驗證碼圖片的存儲,由於驗證是不停變更的,但公司的接口都是https,有相應的證書校驗環節及頭部信息校驗,而項目中現存的網絡請求是封裝的volley json請求,只應該返回json的接口,以前瞭解的也是volley有jsonRequest,StringReque.json
開始打算本身在封裝一套網絡請求用於驗證碼接口,一個偶然的想法,volley是否提供有相應的api呢?經過調研發現 volley有 提供ImageRequest ,實現方法以下:api
MyImageRequest imageRequest = new MyImageRequest( NetworkHelper.processUrl(NetConfig.imgVerificationCode), new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { try { isGettingImageCode = false; img_verificationCode_btn.setImageBitmap(response); img_verificationCode_btn.setVisibility(View.VISIBLE); tv_get_imgCode_error.setVisibility(View.GONE); pb_loading_imgcode.setVisibility(View.GONE); } catch (Exception e) { e.printStackTrace(); } } }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { isGettingImageCode = false; img_verificationCode_btn.setVisibility(View.GONE); tv_get_imgCode_error.setVisibility(View.VISIBLE); pb_loading_imgcode.setVisibility(View.GONE); tv_get_imgCode_error.setText("點擊重試"); // ToastUtil.show("網絡異常,圖片驗證碼獲取失敗"); } }); MyApplication.getInstance().getRequestQueuequeue().add(imageRequest);
public class MyImageRequest extends ImageRequest { public MyImageRequest(String url, Response.Listener<Bitmap> listener, int maxWidth, int maxHeight, ImageView.ScaleType scaleType, Bitmap.Config decodeConfig, Response.ErrorListener errorListener) { super(url, listener, maxWidth, maxHeight, scaleType, decodeConfig, errorListener); } public MyImageRequest(String url, Response.Listener<Bitmap> listener, int maxWidth, int maxHeight, Bitmap.Config decodeConfig, Response.ErrorListener errorListener) { super(url, listener, maxWidth, maxHeight, decodeConfig, errorListener); } @Override public Map<String, String> getHeaders() throws AuthFailureError { return initHeader(urlBuilder(getUrl(),null),null,"GET"); //封裝head信息 }
相關的證書校驗 在以前的文章中提到 重寫網絡
HTTPSTrustManager中的
checkServerTrusted