# 版本检查接口业务逻辑实现 ## 📋 实现概述 参考 `AppService.getUserInfo` 的实现方式,为 `/api/common/checkAppVersion` 接口创建了完整的业务逻辑封装,包括数据模型、服务方法和调用逻辑。 ## 🔧 实现内容 ### 1. **AppService.checkAppVersion 方法** **文件**: `uikit/src/main/java/cn/wildfire/chat/kit/net/AppService.java` ```java //检查app版本 /api/common/checkAppVersion public void checkAppVersion(String version, int versionCode, String platform, SimpleCallback callback){ String url = APP_SERVER_ADDRESS + "/api/common/checkAppVersion"; Map params = new HashMap<>(); params.put("version", version); params.put("versionCode", versionCode); params.put("platform", platform); OKHttpHelper.post(url, params, Constants.getOkhttpHeaderParams(), callback); } ``` **特点**: - ✅ 参考 `getUserInfo` 方法的实现模式 - ✅ 使用 `OKHttpHelper.post` 发送请求 - ✅ 自动添加认证头信息 `Constants.getOkhttpHeaderParams()` - ✅ 支持泛型回调 `SimpleCallback` ### 2. **CheckAppVersionResult 数据模型** **文件**: `uikit/src/main/java/cn/wildfire/chat/kit/net/model/CheckAppVersionResult.java` ```java public class CheckAppVersionResult extends StatusResult implements Serializable { private int id; private String platform; private int version_code; private String version_name; private String update_content; private String download_url; private int file_size; private String is_force_update; private String is_latest; private String status; private long createtime; private long updatetime; // 业务逻辑方法 public boolean hasUpdate() { return "0".equals(is_latest); } public boolean isForceUpdate() { return "1".equals(is_force_update); } } ``` **特点**: - ✅ 继承 `StatusResult` 基类 - ✅ 包含所有服务器返回的字段 - ✅ 提供业务逻辑方法 `hasUpdate()` 和 `isForceUpdate()` - ✅ 实现 `Serializable` 接口支持序列化 ### 3. **MainActivity 调用逻辑优化** **文件**: `app/src/main/java/com/xunpaisoft/social/im/main/MainActivity.java` ```java private void requestVersion() { Log.d("MainActivity", "开始请求最新版本号"); // 使用AppService.checkAppVersion方法,参考getUserInfo的实现方式 AppService.Instance().checkAppVersion(dangqianversion, VersionUtils.getVersionCode(this), "2", new SimpleCallback() { @Override public void onUiSuccess(CheckAppVersionResult result) { if (result != null && result.isSuccess()) { CheckAppVersionResult data = result.getData(); if (data != null) { // 版本比较和弹窗显示逻辑 int versionUpdate = VersionUtils.compareVersion(dangqianversion, data.getVersion_name()); if (versionUpdate == -1) { showVersionUpdateDialog(data.getVersion_name(), data.getUpdate_content(), data.getDownload_url(), data.isForceUpdate()); } } } } @Override public void onUiFailure(int code, String msg) { Log.e("MainActivity1", "版本检查网络请求失败: " + code + " - " + msg); } }); } ``` **特点**: - ✅ 使用类型安全的 `SimpleCallback` - ✅ 直接访问数据模型属性,无需手动解析JSON - ✅ 使用业务逻辑方法 `data.isForceUpdate()` 和 `data.hasUpdate()` - ✅ 代码简洁,易于维护 ## 🎯 业务逻辑对比 ### **修改前 (手动解析LinkedTreeMap)** ```java // 复杂的LinkedTreeMap解析 if (response instanceof java.util.LinkedTreeMap) { java.util.LinkedTreeMap responseMap = (java.util.LinkedTreeMap) response; Object codeObj = responseMap.get("code"); int code = codeObj instanceof Number ? ((Number) codeObj).intValue() : -1; // ... 大量类型转换代码 } ``` ### **修改后 (使用数据模型)** ```java // 简洁的类型安全访问 if (result != null && result.isSuccess()) { CheckAppVersionResult data = result.getData(); String versionName = data.getVersion_name(); boolean forceUpdate = data.isForceUpdate(); // ... 直接使用属性 } ``` ## 📊 优势对比 | 方面 | 修改前 | 修改后 | |------|--------|--------| | **类型安全** | ❌ 运行时类型检查 | ✅ 编译时类型检查 | | **代码可读性** | ❌ 复杂的类型转换 | ✅ 直观的属性访问 | | **维护性** | ❌ 硬编码字段名 | ✅ 自动补全和重构支持 | | **错误处理** | ❌ 手动异常处理 | ✅ 框架自动处理 | | **业务逻辑** | ❌ 分散在调用处 | ✅ 封装在数据模型中 | ## 🔄 调用流程 1. **MainActivity.requestVersion()** - 获取当前版本信息 - 调用 `AppService.checkAppVersion()` 2. **AppService.checkAppVersion()** - 构建请求参数 - 发送HTTP请求 - 返回 `CheckAppVersionResult` 对象 3. **CheckAppVersionResult** - 自动解析JSON响应 - 提供业务逻辑方法 - 类型安全的数据访问 4. **MainActivity 处理结果** - 版本比较 - 显示更新弹窗 - 处理用户选择 ## 🎉 实现效果 - ✅ **代码简洁**: 从100+行复杂解析代码简化为20行清晰逻辑 - ✅ **类型安全**: 编译时检查,避免运行时类型错误 - ✅ **易于维护**: 统一的接口调用模式,便于后续扩展 - ✅ **业务封装**: 版本检查逻辑封装在数据模型中 - ✅ **框架一致**: 与现有 `getUserInfo` 等方法保持一致的调用模式 ## 📝 使用示例 ```java // 参考getUserInfo的调用方式 AppService.Instance().getUserInfo(user_id, is_friend, new SimpleCallback() { @Override public void onUiSuccess(GetUserInfoResult infoResult) { if (infoResult != null) { GetUserInfoResult data = infoResult.getData(); // 处理用户信息 } } @Override public void onUiFailure(int code, String msg) { // 处理错误 } }); // 版本检查的调用方式(完全一致的模式) AppService.Instance().checkAppVersion(version, versionCode, platform, new SimpleCallback() { @Override public void onUiSuccess(CheckAppVersionResult result) { if (result != null) { CheckAppVersionResult data = result.getData(); // 处理版本信息 } } @Override public void onUiFailure(int code, String msg) { // 处理错误 } }); ``` ## 🎯 总结 通过参考 `AppService.getUserInfo` 的实现方式,成功为版本检查接口创建了完整的业务逻辑封装: 1. **统一的服务层**: `AppService.checkAppVersion()` 方法 2. **类型安全的数据模型**: `CheckAppVersionResult` 类 3. **简洁的调用逻辑**: `MainActivity.requestVersion()` 方法 这种实现方式不仅解决了当前的LinkedTreeMap解析问题,还为后续的接口开发提供了标准化的模板,提高了代码的可维护性和可扩展性。