aierJun禁戒的地平线

三笠的思恋围巾huo

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,谢谢。如说明有误,欢迎指教,谢谢。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aierJun/article/details/72739534
个人分类: 问题解决 知识点
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

java.lang.IncompatibleClassChangeError: BasicHttpParams

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭