rxandroid+okhttp下载并支持https
2017-03-07 13:38
204 查看
public class DownloadUtils { private OkHttpClient httpUtils; public DownloadUtils() { httpUtils = new OkHttpClient(); } /** * 定义下载方法,使用rx的编程思想 * * @param url * @return */ public Observable<byte[]> downloadImage(final String url, final RequestBody requestBody) { //创建被观察者 return Observable.create(new Observable.OnSubscribe<byte[]>() { @Override public void call(final Subscriber<? super byte[]> subscriber) { //判断观察者和被观察者是否存在订阅关系 if (!subscriber.isUnsubscribed()) { Request request = new Request.Builder().url(url).post(requestBody).build(); if (httpUtils != null) { httpUtils.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { subscriber.onError(e); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { //拿到结果的一瞬间触发事件,并传递数据给观察者 //把请求结果转化成字节数组 byte[] bytes = response.body().bytes(); subscriber.onNext(bytes); } //数据发送已经完成 subscriber.onCompleted(); } }); } } } }); } public DownloadUtils addTrustAllSSL(String url) { if (url.startsWith("https")) { OkHttpClient.Builder builder = new OkHttpClient.Builder().hostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String s, SSLSession sslSession) { return true; } }); TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { @Override public void checkClientTrusted( java.security.cert.X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException { } @Override public void checkServerTrusted( java.security.cert.X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException { } @Override public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[] {}; } } }; try { SSLContext sc = SSLContext.getInstance("TLS"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); builder.sslSocketFactory(sc.getSocketFactory()); } catch (Exception e) { e.printStackTrace(); } httpUtils = builder.protocols(Collections.singletonList(Protocol.HTTP_1_1)).build(); } return this; } }
使用的时候:
@Override public void downloadIcon(String url) { // 下载图片 TreeMap<String, Object> parameters = new TreeMap<>(); parameters.putAll(Constants.getCommonParameters(context)); parameters.put("fileName", url); parameters = Md5Utils.removeEmptyParameters(parameters); DownloadUtils downloadUtils = new DownloadUtils(); RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM) .addFormDataPart("v", "1.0") .addFormDataPart("appv", String.valueOf(AppUtils.getAppVersionCode(context))) .addFormDataPart("p", "Android") .addFormDataPart("d", Build.MODEL) .addFormDataPart("os", String.valueOf(Build.VERSION.SDK_INT)) .addFormDataPart("fileName", url) .addFormDataPart("sign", Md5Utils.getSign(parameters)) .build(); downloadUtils .addTrustAllSSL(com.sf.sdk.constants.Constants.BASE_URL) .downloadImage(com.sf.sdk.constants.Constants.BASE_URL + "aircap/user/viewPic.shtml", requestBody) .subscribeOn(Schedulers.io())//IO操作 .observeOn(AndroidSchedulers.mainThread())//切换到主线程里面 .subscribe(new Subscriber<byte[]>() { @Override public void onCompleted() { //主要用于处理加载对话框的显示与隐藏 } @Override public void onError(java.lang.Throwable throwable) { } @Override public void onNext(byte[] bytes) { //从服务器端获取的字节数组对象,通过BitmapFactory把字节数组转化成Bitmap对象 view.onDownloadIconSuc(bytes); } }); }
相关文章推荐
- Android 基于OkHttp的下载,支持https,断点下载,优化下载速度
- RxJava+RxAndroid+OKHTTP实现get post 以及下载图片功能
- Android OkHttp实现HTTPS访问,支持Android 4.X系统HTTPS访问
- RxAndroid结合OkHttp实现图片下载、get、post请求
- android 默认浏览器 无法下载,此手机不支持此内容(自定义文件or APK文件看过了)
- android 让webview支持https 双向认证(SSL)
- android httpClient 支持HTTPS的2种处理方式
- android 下载文件(支持多任务,支持断点.....)
- android httpClient 支持HTTPS的2种处理方式
- [置顶] win7使用msysgit下载android源码(最新地址为:https://android.googlesource.com/)
- 解决drush make 2.3 在不支持ssl的空间上无法下载https地址下的资源的问题
- [安卓]成功在android平台用ndk上编译libcurl+openssl支持https
- android httpClient 支持HTTPS的2种处理方式
- 打造支持apk下载和html5缓存的 IIS(配合一个超简单的android APP使用)具体解释
- IIS7上设置MIME让其支持android和Iphone的更新下载
- repo下载android出现fatal: Unable to find remote helper for 'https'问题的方法
- android实现多任务多线程支持断点下载的下载软件
- android源码下载,curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo网络不可达
- Android如何通过https协议下载自己的https网站上的文件/apk等