No static field INSTANCE of type Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier;

问题背景:

由于使用了宜搭平台作为后台数据存储的地方,而调用宜搭的接口要接入其sdk。但是其xxpt.gateway.shared.client-1.1.4.aar包使用了HttpClient来实现网络访问的,但是在android9时HttpClient被完全移除了,但是这个类还在sdk中而且还基本内容都被删除了:


package org.apache.http.conn.ssl;

/**
 * The ALLOW_ALL HostnameVerifier essentially turns hostname verification
 * off. This implementation is a no-op, and never throws the SSLException.
 * 
 * @author Julius Davies
 *
 * @deprecated Please use {@link java.net.URL#openConnection} instead.
 *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
 *     for further details.
 */
@Deprecated
public class AllowAllHostnameVerifier extends AbstractVerifier {

    public final void verify(
            final String host, 
            final String[] cns,
            final String[] subjectAlts) {
        // Allow everything - so never blowup.
    }

    @Override
    public final String toString() { 
        return "ALLOW_ALL"; 
    }
    
}

普通的HttpClient中的AllowAllHostnameVerifier内容:


package org.apache.http.conn.ssl;

import org.apache.http.annotation.Immutable;

/** @deprecated */
@Deprecated
@Immutable
public class AllowAllHostnameVerifier extends AbstractVerifier {
	//可以知道虽然类也被置为过期的,但INSTANCE静态常量还是在的;
    public static final AllowAllHostnameVerifier INSTANCE = new AllowAllHostnameVerifier();

    public AllowAllHostnameVerifier() {
    }

    public final void verify(String host, String[] cns, String[] subjectAlts) {
    }

    public final String toString() {
        return "ALLOW_ALL";
    }
}

这就有问题了,当xxpt.gateway.shared.client调用AllowAllHostnameVerifier这个文件时访问里边的属性时会访问到AndroidSdk中的这个类AllowAllHostnameVerifier,但是其中的属性已经被删除了,因此就会报No static field INSTANCE这个错误的。

解决方法:

  1. 引入了cz.msebera.android:httpclient:4.5.8这个库代替HttpClient(是类都改了路径,防止xxpt包使用的为正常功能的那个类);
  2. 复制出xxpt中的所有类:在这里插入图片描述

修改其中使用org.apache.http路径的文件为cz.msebera.android.httpclient路径下的类:
在这里插入图片描述

因此app正常了(看着也能把网络请求替换为UrlConnection或okhttp,不过还没深入研究,后期在进行更新)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值