6 changed files with 241 additions and 26 deletions
-
61app/src/main/java/com/ouxuan/oxface/orderOX/OrderSelectionActivity.java
-
18app/src/main/java/com/ouxuan/oxface/orderOX/adapter/OrderSelectionAdapter.java
-
17app/src/main/java/com/ouxuan/oxface/orderOX/model/OrderVerificationData.java
-
14app/src/main/res/layout/activity_order_selection.xml
-
7app/src/main/res/layout/item_order_selection.xml
-
148订单核销选择页面问题修复说明.md
@ -0,0 +1,148 @@ |
|||
# 订单核销选择页面问题修复说明 |
|||
|
|||
## 问题分析 |
|||
|
|||
### 🔍 **问题描述** |
|||
1. **弹框太小**: 原有的弹窗尺寸较小,显示内容有限 |
|||
2. **没有显示订单数据**: 数据解析失败,JSON结构不匹配 |
|||
|
|||
### 📊 **日志分析** |
|||
从日志可以看出: |
|||
```json |
|||
{"result":[{"info":{"card_no":"250313397","rest_number":100.0,"status":0.0,"user_face_id":""},"order_no":"MC20250313171548535218","order_type":"3","v_code":["2503215744"]},{"info":{"card_no":"2509085314","rest_number":7.0,"status":0.0,"user_face_id":""},"order_no":"MC20250908145253448493","order_type":"3","v_code":["2509087910"]}]} |
|||
``` |
|||
|
|||
传递的数据只包含`result`数组,而不是完整的`OrderVerificationData`结构。 |
|||
|
|||
## 修复方案 |
|||
|
|||
### 🛠️ **1. 数据解析优化** |
|||
|
|||
#### 修改文件: `OrderSelectionActivity.java` |
|||
- **增强JSON解析逻辑**: 支持多种数据格式 |
|||
- **三层解析策略**: |
|||
1. 尝试解析完整的`OrderVerificationData`结构 |
|||
2. 尝试解析包含`result`字段的对象 |
|||
3. 直接解析为订单数组 |
|||
|
|||
```java |
|||
// 支持多种JSON格式的解析逻辑 |
|||
try { |
|||
OrderVerificationData orderData = gson.fromJson(orderDataJson, OrderVerificationData.class); |
|||
if (orderData != null && orderData.getData() != null && orderData.getData().getResult() != null) { |
|||
parsedOrderList = orderData.getData().getResult(); |
|||
} |
|||
} catch (Exception e) { |
|||
// 如果完整结构解析失败,尝试直接result结构解析 |
|||
JsonObject jsonObject = gson.fromJson(orderDataJson, JsonObject.class); |
|||
if (jsonObject.has("result")) { |
|||
JsonArray resultArray = jsonObject.getAsJsonArray("result"); |
|||
Type listType = new TypeToken<List<OrderVerificationData.OrderItem>>(){}.getType(); |
|||
parsedOrderList = gson.fromJson(resultArray, listType); |
|||
} |
|||
} |
|||
``` |
|||
|
|||
#### 修改文件: `OrderVerificationData.java` |
|||
- **增强空值处理**: 防止字段为空时出现异常 |
|||
- **默认值设置**: 为空字段提供合理的默认值 |
|||
|
|||
```java |
|||
public String getFormattedTimeInfo() { |
|||
if (start_time != null && end_time != null) { |
|||
String startTimeOnly = start_time.length() > 16 ? start_time.substring(11, 16) : start_time; |
|||
String endTimeOnly = end_time.length() > 16 ? end_time.substring(11, 16) : end_time; |
|||
return startTimeOnly + "-" + endTimeOnly; |
|||
} |
|||
return "时间未设置"; |
|||
} |
|||
|
|||
public String getProjectName() { |
|||
return project != null && !project.isEmpty() ? project : "未知项目"; |
|||
} |
|||
``` |
|||
|
|||
### 📐 **2. 界面尺寸优化** |
|||
|
|||
#### 修改文件: `activity_order_selection.xml` |
|||
- **增大弹窗宽度**: 左右边距从40dp减少到20dp |
|||
- **增加最小高度**: 设置`minHeight="500dp"` |
|||
- **优化列表高度**: 最大高度增加到500dp,最小高度200dp |
|||
|
|||
```xml |
|||
<LinearLayout |
|||
android:layout_width="match_parent" |
|||
android:layout_height="wrap_content" |
|||
android:layout_centerInParent="true" |
|||
android:layout_marginLeft="20dp" |
|||
android:layout_marginRight="20dp" |
|||
android:minHeight="500dp"> |
|||
``` |
|||
|
|||
#### 修改文件: `item_order_selection.xml` |
|||
- **增加列表项高度**: 最小高度设置为140dp |
|||
- **优化内边距**: 增加到20dp提供更好的视觉空间 |
|||
- **调整左侧标识宽度**: 从120dp减少到100dp,为内容留出更多空间 |
|||
|
|||
### 🎯 **3. 适配器优化** |
|||
|
|||
#### 修改文件: `OrderSelectionAdapter.java` |
|||
- **空值安全处理**: 检查所有可能为空的字段 |
|||
- **调试日志增强**: 添加详细的绑定日志 |
|||
- **数据显示优化**: 确保即使部分字段为空也能正常显示 |
|||
|
|||
```java |
|||
// 安全的数据绑定 |
|||
int sessionCount = order.getNumber() > 0 ? order.getNumber() : 1; |
|||
String orderNo = order.getOrder_no() != null ? order.getOrder_no() : "未知订单号"; |
|||
String projectName = order.getProjectName(); |
|||
|
|||
// 调试日志 |
|||
Log.d("OrderSelectionAdapter", "绑定订单 " + position + ": " + orderNo + ", 项目: " + projectName); |
|||
``` |
|||
|
|||
## 修复效果 |
|||
|
|||
### ✅ **预期改进** |
|||
1. **数据显示正常**: 支持当前的JSON数据格式,能够正确解析和显示订单信息 |
|||
2. **弹窗尺寸合适**: 增大的弹窗能够容纳更多内容,提供更好的用户体验 |
|||
3. **鲁棒性增强**: 即使数据不完整也能正常显示,不会崩溃 |
|||
4. **调试信息完善**: 详细的日志帮助排查问题 |
|||
|
|||
### 📊 **支持的数据格式** |
|||
现在支持以下三种JSON格式: |
|||
|
|||
1. **完整格式** (原设计): |
|||
```json |
|||
{ |
|||
"code": 0, |
|||
"data": { |
|||
"result": [...] |
|||
} |
|||
} |
|||
``` |
|||
|
|||
2. **简化格式** (当前接口返回): |
|||
```json |
|||
{ |
|||
"result": [...] |
|||
} |
|||
``` |
|||
|
|||
3. **数组格式**: |
|||
```json |
|||
[...] |
|||
``` |
|||
|
|||
### 🔍 **调试建议** |
|||
- 查看LogCat中的`OrderSelectionActivity`和`OrderSelectionAdapter`标签 |
|||
- 确认数据解析成功的日志: "成功解析直接的result结构" |
|||
- 检查订单绑定日志: "绑定订单 X: 订单号, 项目: 项目名" |
|||
|
|||
## 注意事项 |
|||
|
|||
1. **兼容性**: 修改保持向后兼容,支持原有的完整JSON格式 |
|||
2. **性能**: 三层解析策略可能略微影响性能,但提供了更好的容错性 |
|||
3. **维护性**: 增加的空值检查使代码更安全,减少崩溃风险 |
|||
|
|||
通过这些修复,订单核销选择页面应该能够正常显示订单数据,并提供更好的用户体验。 |
Write
Preview
Loading…
Cancel
Save
Reference in new issue