@daweibayu @BinaryHB @ycui

最近升级sdk 到最新版本的4.2.0. 在聊天图片消息获取宽高时出现类型转换错误, 具体错误见下图

异常是:

java.lang.ClassCastException

java.math.BigDecimal cannot be cast to java.lang.Integer

至于为什么width是1280.0和960.0这个不是太清楚,期望尽快解决下。

谢谢!

你好,请贴下复现 java.math.BigDecimal cannot be cast to java.lang.Integer 堆栈的完整代码。我必须要复现问题,才可以继续定位原因。

其实上图已经定位很准确了,这里再贴下吧:

   AVIMImageMessage imageMsg = (AVIMImageMessage) message;
   String localFilePath = imageMsg.getLocalFilePath();
   int width = imageMsg.getWidth();
    int height = imageMsg.getHeight();

在imageMsg.getWidth()这里出问题的。

目前,没办法,只能改成下面的方法获取宽高了:

   private int getIntValByKey(AVIMImageMessage imageMsg, String key) {
        Map<String, Object> metaData = imageMsg.getFileMetaData();
        if (metaData != null && metaData.containsKey(key)) {
            Object value = metaData.get(key);
            if (value instanceof Integer || value instanceof Long) {
                return (int) value;
            } else if (value instanceof Double) {
                return (int) ((double) value);
            }else if(value instanceof BigDecimal){
               return ((BigDecimal) value).intValue();
            }
        }
        return 0;
    }

@yuci @BinaryHB @daweibayu

针对上述问题,再补充一点,升级后发现也有其他自定义的一些属性转换后出现错误。老版本都是int型的,比如客户端给出的值明明就是4,取出来却发现是BigDecima 的l4.0. 这个坑也太大了吧

已经在定位中了。稍等。

@gdsy 还有哪些地方呢? 如果你那边在测试是发现这种情况的话,可以把其他情况也一起贴出来一下,我们看看是不是哪里有有问题。

目前主要上面两处地方:还有类似下面的位置:

/**
 * 消息子类型
 *
 * @return
 */
public int getCategory() {
    Object obj = getAttrs().get(CATEGORY);
    if (obj == null) {
        return 0;
    }
    if (obj instanceof String) {
        return Integer.valueOf((String) obj);
    } else if (obj instanceof Integer) {
        return (int) obj;
    }
    return 0;
}

/**
 * 活动成员数量
 *
 * @return
 */
public int getMemberCount() {
    Object obj = getAttrs().get(MEMBERSCOUNT);
    if (obj == null) {
        return 0;
    }
    return (int) obj;
}

很多类似的地方我都怀疑有问题,我赋值的时候是整型的,取出来就不对了。我清楚的记得老版本我塞进去的是4,取出来是字符串"4", 因此有了getCategory方法中的类型判断。至于新版本为什么变成4.0需要你们帮忙排查了

明白,我这边看一下具体原因。

问下这个问题有结果了吗?似乎新版本的修复并没有对此问题有任何描述

请问最新版 SDK 下还存在这个问题吗?