You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Android功能迁移至外部REST服务器后,如何适配LatLng类?

解决Android与服务端LatLng类不兼容的方案

1. 手动编写转换工具类

这是最直接的解决方式,通过提取两个类的核心坐标字段完成双向转换,注意两个类的字段命名差异:Android端是latitude/longitude,服务端是lat/lng。

Android端转服务端LatLng

public static com.google.maps.model.LatLng toServerLatLng(com.google.android.gms.maps.model.LatLng androidLatLng) {
    if (androidLatLng == null) return null;
    return new com.google.maps.model.LatLng(androidLatLng.latitude, androidLatLng.longitude);
}

服务端转Android端LatLng

public static com.google.android.gms.maps.model.LatLng toAndroidLatLng(com.google.maps.model.LatLng serverLatLng) {
    if (serverLatLng == null) return null;
    return new com.google.android.gms.maps.model.LatLng(serverLatLng.lat, serverLatLng.lng);
}

2. 定义通用DTO统一数据格式

如果涉及频繁跨端数据传递,可创建一个独立的坐标传输类作为中间载体,避免直接依赖两个不同的LatLng实现:

public class LatLngDTO {
    private double latitude;
    private double longitude;

    // 构造方法、Getter、Setter
    public LatLngDTO(double latitude, double longitude) {
        this.latitude = latitude;
        this.longitude = longitude;
    }

    // 从Android LatLng转换
    public static LatLngDTO fromAndroid(com.google.android.gms.maps.model.LatLng androidLatLng) {
        return androidLatLng == null ? null : new LatLngDTO(androidLatLng.latitude, androidLatLng.longitude);
    }

    // 从服务端LatLng转换
    public static LatLngDTO fromServer(com.google.maps.model.LatLng serverLatLng) {
        return serverLatLng == null ? null : new LatLngDTO(serverLatLng.lat, serverLatLng.lng);
    }

    // 转Android端LatLng
    public com.google.android.gms.maps.model.LatLng toAndroid() {
        return new com.google.android.gms.maps.model.LatLng(latitude, longitude);
    }

    // 转服务端LatLng
    public com.google.maps.model.LatLng toServer() {
        return new com.google.maps.model.LatLng(latitude, longitude);
    }
}

后续跨端传递数据时统一使用LatLngDTO,降低模块耦合度。

3. 序列化/反序列化阶段处理字段映射

如果通过JSON传递坐标数据,可自定义序列化规则实现字段自动映射。以Gson为例,编写TypeAdapter处理适配:

public class AndroidLatLngAdapter extends TypeAdapter<com.google.android.gms.maps.model.LatLng> {
    @Override
    public void write(JsonWriter out, com.google.android.gms.maps.model.LatLng value) throws IOException {
        out.beginObject();
        out.name("lat").value(value.latitude);
        out.name("lng").value(value.longitude);
        out.endObject();
    }

    @Override
    public com.google.android.gms.maps.model.LatLng read(JsonReader in) throws IOException {
        in.beginObject();
        double lat = 0, lng = 0;
        while (in.hasNext()) {
            switch (in.nextName()) {
                case "lat":
                    lat = in.nextDouble();
                    break;
                case "lng":
                    lng = in.nextDouble();
                    break;
                default:
                    in.skipValue();
                    break;
            }
        }
        in.endObject();
        return new com.google.android.gms.maps.model.LatLng(lat, lng);
    }
}

注册该Adapter后,Android端即可直接与服务端的LatLng JSON格式兼容。

内容的提问来源于stack exchange,提问作者rejp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:45:45