java - 替换已弃用的 org.apache.http.conn.scheme.SchemeRegistry、ThreadSafeClientConnManager 类等

标签 java android apache https android-6.0-marshmallow

我正在将我的代码移植到 android 6.0。由于 apache 类已在 API 23 中弃用并删除,因此我无法找到与之前的代码完全匹配的代码来建立 HTTPS 连接。 以下是我的代码

try {


        SchemeRegistry schemeRegistry = new SchemeRegistry();
        schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        schemeRegistry.register(new Scheme("https",new CustomSSLSocketFactory(), 443));// new CustomSSLSocketFactory().newSslSocketFactory(context.getResources()), 443));

        HttpParams httpParameters = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParameters, 120000);
        ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(httpParameters, schemeRegistry);
        httpClient = new DefaultHttpClient(cm, httpParameters);
        setHttpClient(httpClient);

        AbstractMediator.setServerTime(System.currentTimeMillis());
        httpResponse = httpClient.execute(request);

        serviceResponseObject.setResponseCode(httpResponse.getStatusLine().getStatusCode());
        serviceResponseObject.setMessage(httpResponse.getStatusLine().getReasonPhrase());
        serviceResponseObject.setAllHeader(httpResponse.getAllHeaders());


        Header[] header = httpResponse.getAllHeaders();

    }catch (UnknownHostException e){
        Utility.printStackTrace(e);
        serviceResponseObject.setResponseBody("");
        return responseWithErrorCode(NETWORK_ERROR_CODE101, serviceResponseObject);
    }  catch (IOException e) {
        Utility.printStackTrace(e);
        return responseWithErrorCode(NETWORK_ERROR_CODE100, serviceResponseObject);
    } catch (Exception e) {
        Utility.printStackTrace(e);
        return responseWithErrorCode(NETWORK_ERROR_CODE100, serviceResponseObject);
    }

我已阅读此链接 Deprecated: org.apache.http.conn.scheme.scheme is deprecated 。它确实提到了方案类的新构造函数,但没有提到其余的方法。我的应用程序最低 API 级别是 14,如果有任何替代方法确实尊重它,我会很高兴。

我读过这篇文章'org.apache.http.HttpEntity' is deprecated. How to solve this error in android studio?其中讨论了使用 apache 旧版以及有关 Marek Sebera 的新 Android Apache HttpClient 包的其他解决方案,但这并不能满足我的目的。

我无法使用 Volley、Retrofit、OKHttp 等库,因为我有 Soap XML 格式的 Web 服务

我想完全从 apache 迁移出去。我关心的是知道 HttpsUrlConnection 类中的所有方法都可以用于替换。如果我能得到一个与此相关的代码,该代码完全按照我上面所做的操作,但使用新的 API 方法,我将不胜感激。我开始了解Registry、PoolingHttpClientConnectionManager等类,但我不明白如何使用它们来获得上述结果

最佳答案

Apache HTTP 客户端弃用

据 Google 称,在 Android 6.0 中,他们取消了对 Apache HTTP 客户端的支持。从 Android 9 开始,该库已从 bootclasspath 中删除,并且默认情况下不可用于应用。

因此,如果您仍然希望将其提供给您的应用程序,Google 也提供了解决方案。

AndroidManifest.xml 文件的应用程序内使用以下标记

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

有关迁移过程的更多详细信息,请参阅 Android 文档。 https://developer.android.com/about/versions/pie/android-9.0-changes-28#apache-p

关于java - 替换已弃用的 org.apache.http.conn.scheme.SchemeRegistry、ThreadSafeClientConnManager 类等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37562189/

相关文章:

Android 谷歌地图 v2 moveCamera 不工作

amazon-web-services - 无法在 apache 服务器上启用缓存控制

java - Ant 与 hudson war

android - Android ImageButton 背景的挑战

java - 如何在 hibernate 4 中定义获取 session 的事务?

android - 具有适合屏幕的动态列和行的 GridView (无需滚动)

php - BinaryFileResponse 上的 session 丢弃安全 token

如果不弃用 ADMIN_MEDIA_PREFIX,则无法访问 Django 管理 CSS 文件

java - 正则表达式检查偶数个前面的字符

java - 为什么不调用 java.util.stream.Stream#close()?