Android Studio 3.2 + Tomcat 8.5.59 本地服务器联调:仿美团外卖项目数据请求3步配置

Android Studio 3.2 + Tomcat 8.5.59 本地服务器联调:仿美团外卖项目数据请求3步配置
Android Studio与Tomcat本地服务器联调实战从零搭建仿美团外卖数据交互系统1. 开发环境全景配置指南在开始仿美团外卖项目前需要搭建完整的Android客户端与本地服务器联调环境。不同于简单的UI开发网络数据交互类项目对环境配置有更严格的要求。必备工具清单Android Studio 3.2推荐使用稳定版而非最新版避免兼容性问题JDK 8注意配置JAVA_HOME环境变量Tomcat 8.5.59经测试最稳定的教学用版本第三方模拟器夜神/天天模拟器原生模拟器无法访问本地网络关键提示Android原生模拟器默认使用独立网络空间无法直接访问主机localhost。必须使用桥接模式的第三方模拟器或真机调试。环境验证步骤启动Tomcat服务# Windows环境 cd apache-tomcat-8.5.59/bin startup.bat # 验证访问 curl http://localhost:8080配置模拟器网络# 获取主机IP非127.0.0.1 ipconfig /all # 模拟器需使用该IP访问服务2. Tomcat服务端深度配置2.1 项目目录结构规范webapps/ └── ROOT/ ├── shop_list_data.json # 店铺数据 ├── order/ # 订单相关API │ └── submit.json └── img/ # 图片资源 ├── shop/ └── food/2.2 关键配置项说明server.xml连接器优化Connector port8080 connectionTimeout20000 maxThreads150 URIEncodingUTF-8/跨域支持配置web.xmlfilter filter-nameCorsFilter/filter-name filter-classorg.apache.catalina.filters.CorsFilter/filter-class /filter filter-mapping filter-nameCorsFilter/filter-name url-pattern/*/url-pattern /filter-mapping2.3 数据文件示例shop_list_data.json[ { id: 1001, shopName: 川湘居, saleNum: 2356, offerPrice: 20, distributionCost: 5, feature: 川菜, time: 30分钟, banner: img/shop/1001_banner.jpg, shopPic: img/shop/1001_icon.jpg, foodList: [ { foodId: 2001, foodName: 水煮鱼, price: 68, foodPic: img/food/2001.jpg } ] } ]3. Android客户端网络架构实现3.1 网络权限与基础配置AndroidManifest.xml必备权限uses-permission android:nameandroid.permission.INTERNET/ uses-permission android:nameandroid.permission.ACCESS_NETWORK_STATE/网络请求白名单配置Android 9network-security-config domain-config cleartextTrafficPermittedtrue domain includeSubdomainstrue192.168.1.100/domain /domain-config /network-security-config3.2 网络请求核心代码OkHttpClient单例封装public class HttpUtil { private static final OkHttpClient client new OkHttpClient.Builder() .connectTimeout(15, TimeUnit.SECONDS) .readTimeout(15, TimeUnit.SECONDS) .build(); public static void get(String url, Callback callback) { Request request new Request.Builder() .url(Constant.WEB_SITE url) .build(); client.newCall(request).enqueue(callback); } }数据解析工具类public class JsonParse { public static ListShopBean parseShopList(String json) { Type type new TypeTokenListShopBean(){}.getType(); return new Gson().fromJson(json, type); } }4. 关键问题解决方案4.1 第三方模拟器网络配置夜神模拟器特殊设置进入设置 - WLAN长按当前网络 - 修改网络勾选显示高级选项代理选择手动主机名填写电脑IP端口填写8888Charles抓包端口连接测试命令adb shell ping 192.168.1.1004.2 数据缓存策略优化两级缓存实现方案内存缓存使用LruCacheprivate LruCacheString, Bitmap memoryCache new LruCache(maxMemory / 8);磁盘缓存使用DiskLruCacheDiskLruCache diskCache DiskLruCache.open( cacheDir, 1, // appVersion 1, // valueCount 10 * 1024 * 1024 // maxSize );4.3 接口安全增强措施基础签名验证public static String generateSign(MapString, String params, String secret) { params.put(timestamp, System.currentTimeMillis() ); params.put(nonce, UUID.randomUUID().toString()); String[] keys params.keySet().toArray(new String[0]); Arrays.sort(keys); StringBuilder sb new StringBuilder(); for (String key : keys) { sb.append(key).append().append(params.get(key)).append(); } sb.append(secret).append(secret); return MD5(sb.toString()); }5. 调试技巧与性能优化5.1 网络请求监控方案Charles抓包配置步骤安装Charles证书到模拟器配置Proxy - SSL Proxying Settings添加LocationHost为*Port为443Android代码配置代理client.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(192.168.1.100, 8888)));5.2 内存泄漏检测LeakCanary集成debugImplementation com.squareup.leakcanary:leakcanary-android:2.7关键检测点Activity/Fragment中的Handler单例模式中的Context引用静态集合对象5.3 网络图片加载优化Glide高级配置Glide.with(context) .load(url) .diskCacheStrategy(DiskCacheStrategy.ALL) .override(Target.SIZE_ORIGINAL) .signature(new ObjectKey(version)) .into(imageView);6. 项目进阶方向6.1 服务端改造建议Spring Boot替代方案优势内置Tomcat无需单独配置简化RESTful API开发更好的热部署支持基础Controller示例RestController RequestMapping(/shop) public class ShopController { GetMapping(/list) public ListShop getShopList() { return shopService.getAllShops(); } }6.2 客户端架构升级MVVM改造步骤引入ViewModel和LiveData数据绑定替代findViewByIdRepository模式管理数据源ViewModel示例public class ShopViewModel extends ViewModel { private MutableLiveDataListShop shops new MutableLiveData(); public void loadShops() { // 网络请求逻辑 } public LiveDataListShop getShops() { return shops; } }7. 避坑指南常见问题排查表问题现象可能原因解决方案网络请求超时防火墙拦截/IP错误关闭防火墙/检查IP配置JSON解析失败数据格式不符/字段缺失使用Gson的SerializedName注解图片加载失败URL编码问题/缓存失效URLEncode处理/清除缓存模拟器无法联网代理配置错误重置为NAT模式性能优化检查清单[ ] 网络请求合并与减少[ ] 图片加载使用合适尺寸[ ] 避免主线程耗时操作[ ] 使用RecyclerView替代ListView[ ] 合理配置线程池

最新新闻

日新闻

周新闻

月新闻