Expo构建的APP打包成功后扫码触发崩溃重启问题求助
扫码页面打包APK后崩溃修复方案
核心诱因:开发环境内置未捕获异常拦截机制,报错仅展示红屏不会触发应用崩溃;打包为生产APK后,未被捕获的运行时异常会直接导致应用闪退重启。你的代码存在以下可直接触发崩溃的问题,按优先级调整即可:
- 核心问题:
handleBarCodeScanned回调中的两个fetch请求都没有添加错误捕获逻辑,生产环境下如果出现网络波动、接口返回非JSON格式、接口报错等场景,调用response.json()会抛出未捕获的Promise异常,直接触发闪退。 - 潜在问题1:
setScanned(true)状态更新是异步操作,旧代码中状态更新还未生效就发起网络请求,可能偶发重复触发扫码回调的问题。 - 潜在问题2:Picker组件渲染时
< Picker.Item标签名前多了一个空格,生产环境编译优化时可能出现语法解析异常。 - 潜在问题3:
username取值未做非空判断,如果employeeNameDetails()返回空值,接口传参异常也可能引发报错。
具体修改代码
1. 调整handleBarCodeScanned逻辑,添加错误捕获
const handleBarCodeScanned = ({ data }) => { // 先禁用扫码回调,避免重复触发 setScanned(true); setData(data); // 先校验username非空 if (!username) { Alert.alert("错误", "用户信息获取失败,请重试"); return; } // 搜索物品接口添加catch const searchAPI = "https://example.com/api/searchitembyid.php"; const header = { 'Accept': 'application/json', 'Content-Type': 'application/json' }; const itemdata = { itemid: data }; fetch(searchAPI, { method: 'POST', headers: header, body: JSON.stringify(itemdata) }) .then((response)=>response.json()) .then((responseJSON)=>{ setItemData(responseJSON) }) // 新增错误捕获 .catch((err) => { console.error('搜索物品接口报错', err); Alert.alert('提示', '物品信息获取失败,请重试'); }); // 获取房间接口添加catch const roomAPI = "https://example.com/api/getroom.php"; const roomheader = { 'Accept': 'application/json', 'Content-Type': 'application/json' }; const roomdata = { username: username }; fetch(roomAPI, { method: 'POST', headers: roomheader, body: JSON.stringify(roomdata) }) .then((response)=>response.json()) .then((responseJSON)=>{ setRoomName(responseJSON) }) // 新增错误捕获 .catch((err) => { console.error('获取房间接口报错', err); Alert.alert('提示', '房间信息获取失败,请重试'); }); };
2. 修正Picker标签多余空格
<Picker selectedValue={room} style={styles.pickerInput} onValueChange={(itemValue, itemIndex) => setRoom(itemValue)}> {roomName.map((item, index) => { // 去掉标签前的多余空格 return (<Picker.Item label={item.roomname} value={item.roomname} key={index} />); })} </Picker>
预验证建议
修改完成后可以先运行生产模式本地调试,无需打包APK即可复现生产环境的报错:npx expo start --no-dev --minify
如果运行后扫码不再崩溃,再打包APK即可。
内容的提问来源于stack exchange,提问作者fahmijaafar
相关产品推荐
相关产品推荐

