Error updating 'src' of a view managed by MyRCTImageView

参考React Native官网,在RN中调用Android UI 组件(RCTImageView)时候,出现如下错误。

Error while updating property of 'src' of a view managed by MyRCTImageView
java.lang.String can not be cast to com.facebook.react.bridge.ReadableArray

下面是我的部分代码。

// App.js
//RN中主界面 调用ImageView组件  传入src参数
import ImageView from './ImageView';
...
render(){
   return(
       <ImageView
            src={this.state.imageSrc}
            borderRadius={this.state.borderRadius}
            resizeMode={this.state.resizeMode}
       />
   );
}
//ImageView.js
// RN中对android 原生UI组件封装和调用  设置src属性格式为PropTypes.string
let iface = {
name: 'ImageView',
    propTypes: {
        src: PropTypes.string,
        borderRadius: PropTypes.number,
        resizeMode: PropTypes.oneOf(['cover', 'contain', 'stretch']),
        ...ViewPropTypes, // include the default view properties
    },
};
const ImageView = requireNativeComponent('MyRCTImageView',iface);
export default ImageView;

从报错信息,我知道了对src应该传入一个数组类型,而不是string。我在Android中通过@ReactProp构造了setSrc方法。但是我不知道如何调用该方法,以及,如何在RN中对src传入一个数组。

各位知道如何解决吗? 谢谢

//ReactImageManager.java
//Android中创建的UI 组件类

public class ReactImageManager extends SimpleViewManager<ReactImageView> {

    public static final String REACT_CLASS = "MyRCTImageView";

    @Override
    public String getName() {
        return REACT_CLASS; //返回值为在RN中引用的组件名称值   RCTImageView
    }


    /**
     * 此处创建View实例,并返回
     * @param context
     * @return
     */

    @Override
    public ReactImageView createViewInstance(ThemedReactContext context) {
        return new ReactImageView(context, Fresco.newDraweeControllerBuilder(), null,null);

    }


    @ReactProp(name = "src" )
    public void setSrc(ReactImageView view, @Nullable ReadableArray sources) {
        view.setSource(sources);
    }

    @ReactProp(name = "borderRadius", defaultFloat = 0f)
    public void setBorderRadius(ReactImageView view, float borderRadius) {
        view.setBorderRadius(borderRadius);
    }

    @ReactProp(name = ViewProps.RESIZE_MODE)
    public void setResizeMode(ReactImageView view, @Nullable String resizeMode) {
        view.setScaleType(ImageResizeMode.toScaleType(resizeMode));
    }


}
阅读 6.3k
1 个回答

你的setSrc方法接收一个readableArray,然而你在实际调用的时候却传了一个String, 所以报错。
解决方法:
<ImageView src={['']} />
或者更改setSrc的形参类型为String

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题