从List<OrmeauModel>提取经纬度到新ArrayList遇空列表问题
问题排查:提取经纬度后ArrayList为空的原因
以下是几个最可能导致你遇到这个问题的简单错误,逐一排查:
ormeauList本身是空的
循环遍历的前提是ormeauList包含元素,如果这个列表未初始化、或是还没被填充数据(比如异步加载任务还没完成),循环根本不会执行,markerArrayList自然是空的。可以在遍历前加个验证:if (ormeauList == null || ormeauList.isEmpty()) { System.out.println("ormeauList为空,无法提取经纬度"); return; }全局变量被意外覆盖或重置
你声明了全局的markerArrayList,但又在局部执行markerArrayList = new ArrayList<>(),如果后续你操作的是另一个同名局部变量,或者其他代码把全局变量重新赋值为null,就会出现“明明执行了添加但列表为空”的情况。检查代码中是否有其他地方修改了这个全局变量,确保你后续访问的是同一个实例。遍历代码根本没被执行
比如这段遍历逻辑被放在了某个条件分支里(比如if判断不满足),或者在异步任务中(比如网络请求回调还没触发就去访问列表),导致代码没跑起来,列表自然为空。可以在循环里加个打印语句,确认是否进入了循环:for (OrmeauModel model : ormeauList) { System.out.println("正在处理元素:" + model.getMarker_id()); double markerLat = model.getMarker_lat(); double markerLong = model.getMarker_long(); LatLng latLong = new LatLng(markerLat, markerLong); markerArrayList.add(latLong); }getter方法存在隐藏问题
虽然你贴了构造方法,但如果getMarker_lat()或getMarker_long()的实现有误(比如返回的是默认值、或者写错了变量名),不会导致列表为空,但可能让你误以为列表是空的(比如打印时没显示有效坐标)。可以检查getter的具体实现,确保它们正确返回了this.marker_lat和this.marker_long。
修正后的示例代码
// 全局变量 ArrayList<LatLng> markerArrayList; public void processOrmeauData(List<OrmeauModel> ormeauList) { // 先验证数据源 if (ormeauList == null || ormeauList.isEmpty()) { System.out.println("数据源无效,跳过处理"); return; } // 初始化全局列表,避免重复创建或残留旧数据 if (markerArrayList == null) { markerArrayList = new ArrayList<>(); } else { markerArrayList.clear(); } // 遍历填充坐标 for (OrmeauModel model : ormeauList) { double lat = model.getMarker_lat(); double lng = model.getMarker_long(); markerArrayList.add(new LatLng(lat, lng)); } // 验证结果 System.out.println("处理完成,共提取" + markerArrayList.size() + "个坐标"); }
内容的提问来源于stack exchange,提问作者John Lewis
相关产品推荐
相关产品推荐

