我开发了一个反应原生0.43.3的项目
我在iOS中开发和测试所有项目时犯了一个错误。 (在那里工作正常)
问题是当我尝试生成APK以上传到PlayStore,并在设备中测试时发现错误:
android.widget.imageview无法强制转换为android.view.viewgroup
我的主要问题是如何显示错误。处于死机的红色屏幕,我不知道如何找到反应原生的行和组件在哪里发生错误。我想也许我无法实现,因为javascript代码已经编译。
无论如何,我不知道如何解决问题。
我想也许是因为我在图像中使用了微调器(以显示正在加载的图像),例如:
<View style={[styles.resourceActions]}>
<Image
style={{width: imgWidth, height: imgHeight}}
source={{uri: this.props.imageUrl}}
onLoad = {() => this.setState({ loading: false })}
>
<ActivityIndicator
animating={this.state.loading}
style={[styles.spinner, styles.centering, {marginTop: this.state.loadingMarginTop}]}
size="large"
/>
</Image>
</View>
但我不知道,因为我在很多部分和视图中使用了imageview(和fastimage组件)
我的依赖项:
"@remobile/react-native-refresh-infinite-listview": "^1.0.6",
"react": "16.0.0-alpha.6",
"react-native": "0.43.3",
"react-native-camera": "git+https://github.com/lwansbrough/react-native-camera.git",
"react-native-device-info": "^0.10.2",
"react-native-fast-image": "0.0.9",
"react-native-google-analytics-bridge": "^5.0.1",
"react-native-htmlview": "^0.9.0",
"react-native-loading-spinner-overlay": "^0.4.4",
"react-native-material-design": "^0.3.7",
"react-native-modalbox": "^1.3.9",
"react-native-photo-view": "^1.2.0",
"react-native-qrcode-scanner": "0.0.11",
"react-native-qrcode-svg": "^5.0.0",
"react-native-radio-buttons": "^0.14.0",
"react-native-router-flux": "3.38.0",
"react-native-share": "^1.0.20",
"react-native-side-menu": "^0.20.1",
"react-native-svg": "^5.1.7",
"react-native-vector-icons": "^4.0.1"
感谢我的问题中的任何方向
答案 0 :(得分:1)
在原生Android 中,我们无法将ImageView
强制转换为ViewGroup
,因为ImageView
不会扩展类ViewGroup
。实际上,这种铸造是不可能的。
答案 1 :(得分:0)
投射(在这种情况下是向下转发)
简单来说就是将一个特定类型的对象“转变为”另一个继承自第一个类型的对象类型。 转换不是在编译时检查,而是在运行时检查。 基本上你是对编译器'相信我,你可以把这个对象看作是这种类型的'。
示例:
Object aSentenceObject = "This is just a regular sentence";
String aSentenceString = (String) aSentenceObject;
现在..记得当我说我在运行时检查它?那么如果不能进行铸造会发生什么? 让我们说在这种情况下:
Object aSentenceObject = "This is just a regular sentence";
int aSentenceString = (int) aSentenceObject;
由于aSentenceObject无法转换为int,因此将抛出异常。像这样的东西
ClassCastException: java.lang.Object cannot be cast to java.lang.Integer
但这与您的案件有什么关系?
“使用React Native,您不会构建”移动网络应用“,”HTML5应用“, 或“混合应用程序”。你构建了一个真正的移动应用程序 与使用Objective-C或Java构建的应用程序无法区分。应对 Native使用与常规iOS和iOS相同的基本UI构建块 Android应用。“
正如官方React Native页面中所述,您的JavaScript代码会以某种方式编译为本机语言(在Android情况下为Java)。
我们可以看到each React Native control will interact with a native counterpart component。 “我们'允许'编写JavaScript,因为React Native为我们提供了帮助 使用JavaScript编写的控件。但这总是如此 以手机实际本土对手为支撑。反应原生 简单地允许桥梁进行双向通信“ 正如this article
中所述
在原生android中,图片不能有子项(如ScrollView或ViewGroup) 因此,在将JS代码转换为Java的过程中,“翻译机器”会尝试将您的图像视为ViewGroup,因为它有子视图。 结果是你获得的
android.widget.imageview cannot be cast to android.view.viewgroup
<强>结论强>
如果删除该嵌套结构并将ActivityIndicator组件放置为Image组件的兄弟,则应该修复它