如何将Place Picker返回的LatLng格式转换为AsyncTask所需参数?
解决Place Picker坐标格式转换问题
当然有办法搞定这个!我之前开发天气类应用的时候也碰到过类似的需求,给你分享几种实用的方案,从最稳妥到灵活适配的都有:
最推荐:直接用LatLng对象属性(别解析字符串!)
先纠正一个小误区——place.getLatLng()返回的其实是LatLng对象,你看到的lat/lng: (xxx,xxx)只是这个对象的toString()输出结果。所以最靠谱的方式是直接调用对象的属性来获取坐标:
// 获取PlacePicker返回的LatLng对象 LatLng selectedLatLng = place.getLatLng(); // 先判断对象是否为空(避免空指针异常) if (selectedLatLng != null) { // 将数值转为字符串,直接传给AsyncTask String latitude = String.valueOf(selectedLatLng.latitude); String longitude = String.valueOf(selectedLatLng.longitude); asyncTask.execute(latitude, longitude); }
这种方法完全不用处理字符串,既简洁又不容易出错,优先选这个!
如果确实需要解析字符串(比如只能拿到字符串格式的坐标)
要是因为某些限制只能拿到lat/lng: (53.5722088,-1.189055)这种字符串,那可以用下面两种方式解析:
方式1:字符串替换+分割(简单直观)
通过几步字符串处理去掉多余字符,再分割出纬度和经度:
String latLngString = "lat/lng: (53.5722088,-1.189055)"; // 移除开头标识和首尾括号 String cleanedStr = latLngString.replace("lat/lng: ", "") .replace("(", "") .replace(")", ""); // 按逗号分割成两个部分 String[] latLngParts = cleanedStr.split(","); // 去除可能存在的空格,得到最终参数 String lat = latLngParts[0].trim(); String lng = latLngParts[1].trim(); // 传入AsyncTask asyncTask.execute(lat, lng);
方式2:正则表达式(更灵活,适配格式小变动)
用正则直接匹配括号内的数字,适合格式可能有细微变化的场景:
String latLngString = "lat/lng: (53.5722088,-1.189055)"; // 正则匹配括号内的正负小数 Pattern latLngPattern = Pattern.compile("\\((-?\\d+\\.\\d+),(-?\\d+\\.\\d+)\\)"); Matcher matcher = latLngPattern.matcher(latLngString); if (matcher.find()) { String latitude = matcher.group(1); String longitude = matcher.group(2); asyncTask.execute(latitude, longitude); } else { // 处理解析失败的情况,比如打印日志提示 Log.e("CoordParse", "Failed to parse latitude and longitude from string"); }
内容的提问来源于stack exchange,提问作者mistertumek
相关产品推荐
相关产品推荐

