随着17年ios上线必须要支持https,以及考虑到网络安全这块,越来越多的APP开发支持和使用https。

在gradle里配置
compile 'org.xutils:xutils:3.2.2'

在Application里配置

  x.Ext.init(this);  x.Ext.setDebug(BuildConfig.DEBUG);

编写NetWorkUtils.java文件

public class NetWorkUtils {    private static SSLContext mSSLContext = null;    private static final String TAG = "NetWorkUtils";    public static int DEFAULT_CACHE_EXPIRY_TIME = 30 * 1000;    /**     * http get请求     *     * @param params   请求参数 get请求使用 addQueryStringParameter方法添加参数     * @param callback 回调对象     */    public static Callback.Cancelable getHttpRequest(RequestParams params, final HttpCallback callback) {        return sendHttpRequest(HttpMethod.GET, params, callback);    }    /**     * http post请求     *     * @param params   请求参数 post请求使用 addBodyParameter方法添加参数     * @param callback 回调对象     */    public static Callback.Cancelable postHttpRequest(RequestParams params, final HttpCallback callback) {        return sendHttpRequest(HttpMethod.POST, params, callback);    }    public static Callback.Cancelable sendHttpRequest(HttpMethod method, RequestParams params, final HttpCallback callback) {        if (params == null) {            params = new RequestParams();        }        params.setCacheMaxAge(1000 * 0); //为请求添加缓存时间        params.setConnectTimeout(DEFAULT_CACHE_EXPIRY_TIME);        final String url = params.getUri();        LogUtil.d("sendRequest: url = " + url);        SSLContext sslContext = getSSLContext(GoPlusApplication.getApplication());        if (null == sslContext) {            if (BuildConfig.DEBUG) LogManager.d(TAG, "Error:Can't Get SSLContext!");            return null;        }        params.setSslSocketFactory(sslContext.getSocketFactory());        return x.http().request(method, params, new Callback.CommonCallback() {            @Override            public void onCancelled(CancelledException msg) {                Toast.makeText(text, msg.getMessage(), Toast.LENGTH_SHORT).show();                callback.onFinished();            }            @Override            public void onError(Throwable arg0, boolean arg1) {                Toast.makeText(text, arg0.getMessage(), Toast.LENGTH_SHORT).show();                LogManager.i(TAG, "==> RequestCallBack.onError()");                LogManager.e(TAG, "==> response:" + arg0.getMessage() + "\n==> error:" + arg1);                callback.onFinished();            }            @Override            public void onSuccess(String result) {                LogManager.i(TAG, "==> RequestCallBack.onSuccess()");                if (result == null) {                    return;                }                callback.onSuccess(result);            }            @Override            public void onFinished() {                LogUtil.d("onFinished");            }        });    }    /**     * 获取Https的证书     *     * @param context 上下文     * @return SSL的上下文对象     */    private static SSLContext getSSLContext(Context context) {        CertificateFactory certificateFactory = null;        InputStream inputStream = null;        Certificate cer = null;        KeyStore keystore = null;        TrustManagerFactory trustManagerFactory = null;        try {            certificateFactory = CertificateFactory.getInstance("X.509");            inputStream = context.getAssets().open("baidu.cer");//这里导入SSL证书文件            try {                cer = certificateFactory.generateCertificate(inputStream);                LogManager.i(TAG, cer.getPublicKey().toString());            } finally {                inputStream.close();            }            //创建一个证书库,并将证书导入证书库            keystore = KeyStore.getInstance(KeyStore.getDefaultType());            keystore.load(null, null); //双向验证时使用            keystore.setCertificateEntry("trust", cer);            // 实例化信任库            trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());            trustManagerFactory.init(keystore);            mSSLContext = SSLContext.getInstance("TLS");            mSSLContext.init(null, trustManagerFactory.getTrustManagers(), new SecureRandom());            //信任所有证书 (官方不推荐使用)//         s_sSLContext.init(null, new TrustManager[]{new X509TrustManager() {////              @Override//              public X509Certificate[] getAcceptedIssuers() {//                  return null;//              }////              @Override//              public void checkServerTrusted(X509Certificate[] arg0, String arg1)//                      throws CertificateException {////              }////              @Override//              public void checkClientTrusted(X509Certificate[] arg0, String arg1)//                      throws CertificateException {////              }//          }}, new SecureRandom());            return mSSLContext;        } catch (Exception e) {            e.printStackTrace();        }        return null;    }}  public static abstract class HttpCallback {        public abstract void onSucc(String result);        public abstract void onfailed();    }

在activity中调用

RequestParams params = new RequestParams(url);  NetWorkUtils.postHttpRequest(params, new HttpCallback() {            @Override            public void onSuccess(String result) {            }            @Override            public void onFinished() {            }        });    }

更多相关文章

  1. Android(安卓)MediaCodec参数笔记
  2. setBackgroundDrawable和setBackgroundResource的区别
  3. android中文api(85)——HorizontalScrollView
  4. Android中文API(98)―― ContextMenu.ContextMenuInfo
  5. 动画代码Android动画学习笔记动画代码
  6. Android(安卓)intent.Action 参数值及对应功能介绍
  7. [Android实例] android中进行https连接的方式的详解 (转发)
  8. 【攻克Android(安卓)(14)】Dialog 对话框
  9. 相机的研究

随机推荐

  1. 《疯狂Android讲义》
  2. Android学习系列(39)--Android主题和样式
  3. Android UI Action Bar之ActionBarSherlo
  4. 社区讨论:Android的架构设计
  5. Android(安卓)开发之集成百度地图的定位
  6. 原有Android项目集成RN入坑计(一)
  7. android网络编程――使用Android中的网络
  8. Android 如何进行js交互
  9. Android WebView介绍
  10. Android Develop