java.lang.IncompatibleClassChangeError: BasicHttpParams

java.lang.IncompatibleClassChangeError:

关于上面的异常,基本就是不兼容导致的,也许有时你开发时,没问题,但正式发布release时,出现崩溃了,这种情况也是有的。

我在集成微信和QQ等第三方时,调试没问题,但release时,登录可以拉取权限,但返回崩溃,支付是过一会崩溃,日志如下:

**********2017-05-25 11:09:44**********
java.lang.IncompatibleClassChangeError: Class 'org.apache.http.params.BasicHttpParams' does not implement interface 'org.apache.http.params.c' in call to 'org.apache.http.params.c org.apache.http.params.c.setIntParameter(java.lang.String, int)' (declaration of 'org.apache.http.params.b' appears in 

然后发现了这个BasicHttpParams。这个方法我查到是Httpcore里面的方法,我试了换版本,有可能是运气不好,然后想其他方法。

发现,支付里最后拉起支付是api.sendReq(req);这个方法。而BasicHttpParams这个只是生成后键值用做签名而已。既然是key和value的键值对,那Map也可以。所以直接替换Map。

Map<String ,Object> date=new HashMap<>();
            date.put("appid", req.appId);
            date.put("noncestr", req.nonceStr);
            date.put("package", req.packageValue);
            date.put("partnerid", req.partnerId);
            date.put("prepayid", req.prepayId);
            date.put("timestamp", req.timeStamp);
            req.sign = genAppSign(date);
            sb.append("sign\n" + req.sign + "\n\n");
签名代码:
    //获取支付签名Sign
    StringBuilder sb = new StringBuilder();
    public String genAppSign(Map<String,Object> params) {
        StringBuilder sb = new StringBuilder();

        sb.append("appid");
        sb.append('=');
        sb.append( params.get("appid"));
        sb.append('&');

        sb.append("noncestr");
        sb.append('=');
        sb.append( params.get("noncestr"));
        sb.append('&');

        sb.append("package");
        sb.append('=');
        sb.append( params.get("package"));
        sb.append('&');

        sb.append("partnerid");
        sb.append('=');
        sb.append( params.get("partnerid"));
        sb.append('&');

        sb.append("prepayid");
        sb.append('=');
        sb.append( params.get("prepayid"));
        sb.append('&');

        sb.append("timestamp");
        sb.append('=');
        sb.append( params.get("timestamp"));
        sb.append('&');

        sb.append("key=");
        sb.append(WeiXinConstans.APP_KEY);    //WeiXinConstans.APP_KEY
        this.sb.append("sign str\n" + sb.toString() + "\n\n");
        String appSign = MD5.getMessageDigest(sb.toString().getBytes()).toUpperCase();
        return appSign;
    }

#####注意:以上没简化。签名过程

最后登录里面解析用了BasicHttpParams这个的全部替换。

最后完美解决。

以上为博主原创,如需转载,请注明出处http://blog.csdn.net/aierJun/article/details/72739534,谢谢。如说明有误,欢迎指教,谢谢。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值