From b94e83074fe5a6eb7220fef8a1a5064df68f7894 Mon Sep 17 00:00:00 2001 From: YorkShen Date: Thu, 12 Sep 2019 16:33:14 +0800 Subject: [PATCH] [Android] Fix ClassCastException in WXComponent.updateProperties() (#2897) ``` java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String at com.taobao.weex.ui.component.WXComponent.updateProperties(WXComponent.java:710) at com.taobao.weex.ui.component.WXComponent.updateAttrs(WXComponent.java:274) at com.taobao.weex.ui.component.WXComponent.bindData(WXComponent.java:663) at CustomComponent.bindData(InteractiveVideoComponentV2.java:638) at com.taobao.weex.ui.component.WXVContainer.bindData(WXVContainer.java:166) ``` --- .../java/com/taobao/weex/common/WXErrorCode.java | 1 + .../com/taobao/weex/ui/component/WXComponent.java | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java b/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java index b4fb844069..80ef3712fb 100644 --- a/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java +++ b/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java @@ -219,6 +219,7 @@ public enum WXErrorCode { WX_RENDER_ERR_NULL_KEY("-9603", "WX_RENDER_ERR_NULL_KEY", ErrorType.NATIVE_ERROR, ErrorGroup.NATIVE), WX_RENDER_ERR_NATIVE_RUNTIME("-9604", "WX_RENDER_ERR for js error", ErrorType.RENDER_ERROR, ErrorGroup.NATIVE), WX_RENDER_ERR_COMPONENT_NOT_REGISTER("-9605", "WX_RENDER_ERR_COMPONENT_NOT_REGISTER", ErrorType.NATIVE_ERROR, ErrorGroup.NATIVE), + WX_RENDER_ERR_COMPONENT_ATTR_KEY("-9606", "The key passed to Component.updateAttr() is not string", ErrorType.NATIVE_ERROR, ErrorGroup.JS), WX_RENDER_ERR_BRIDGE_ARG_NULL("-9610", "WX_RENDER_ERR_BRIDGE_ARG_NULL", ErrorType.NATIVE_ERROR, ErrorGroup.NATIVE), WX_RENDER_ERR_CONTAINER_TYPE("-9611", "WX_RENDER_ERR_CONTAINER_TYPE", ErrorType.JS_ERROR,ErrorGroup.JS), WX_RENDER_ERR_TRANSITION("-9616", "WX_RENDER_ERR_TRANSITION", ErrorType.JS_ERROR, ErrorGroup.JS), diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java index e7be2ff6d4..6c2f5e5208 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java @@ -707,7 +707,19 @@ public void updateProperties(Map props) { } for (Map.Entry entry : props.entrySet()) { - String key = entry.getKey(); + Object key_obj = entry.getKey(); + String key = WXUtils.getString(key_obj, null); + if (!(key_obj instanceof String)) { + Map map = new HashMap<>(); + map.put("componentType", getComponentType()); + map.put("actual key", key == null ? "" : key); + WXExceptionUtils.commitCriticalExceptionRT(getInstanceId(), + WXErrorCode.WX_RENDER_ERR_COMPONENT_ATTR_KEY, + "WXComponent.updateProperties", + WXErrorCode.WX_RENDER_ERR_COMPONENT_ATTR_KEY.getErrorMsg(), + map); + } + Object param = entry.getValue(); String value = WXUtils.getString(param, null);