Java 无法映射纬度和经度位置

Java 无法映射纬度和经度位置,java,android,json,api,google-maps,Java,Android,Json,Api,Google Maps,编辑: 添加了相关类,以便能够访问JSON数组的每个元素层 当前,当(仍然)尝试访问我正在调用datawrapper类的新对象的位置时,我可以看到访问该位置的代码的实现应该如何工作,但目前我收到以下错误: The method getGeometry() is undefined for the type List. 我正在让Eclipse通过显示'getLongitude()'和'getLatitude()'方法自动完成location对象,但它们应该是'getLat()'和'getLng(

编辑:

添加了相关类,以便能够访问JSON数组的每个元素层

当前,当(仍然)尝试访问我正在调用datawrapper类的新对象的位置时,我可以看到访问该位置的代码的实现应该如何工作,但目前我收到以下错误:

The method getGeometry() is undefined for the type List.
我正在让Eclipse通过显示'getLongitude()'和'getLatitude()'方法自动完成location对象,但它们应该是'getLat()'和'getLng()'方法

我看到了按顺序访问对象是如何让我获得long和lat的,但上面的错误仍然让我感到困惑

以下是我的SerpateJSON类:

数据包装器:

package com.example.restfulweb;

import java.util.List;

import com.google.gson.Gson;

public class DataWrapper<GeoResult> {

    List<GeoName> results;

public List<GeoName> getResults() {
    return results;
}

public void setResults(List<GeoName> results) {
    this.results = results;
}

@SuppressWarnings("rawtypes")
public DataWrapper fromJson(String jsonString)
{
    return new Gson().fromJson(jsonString, DataWrapper.class);
}
}

几何类:

package com.example.restfulweb;

public class Geometry {
private Location location;

public Location getLocation() {
    return location;
}

public void setLocation(Location location) {
    this.location = location;
}
}

地点类别:

包com.example.restfulweb

public class Location {
private Double lat;
private Double lng;

public Double getLat() {
    return lat;
}
public void setLat(Double lat) {
    this.lat = lat;
}
public Double getLng() {
    return lng;
}
public void setLng(Double lng) {
    this.lng = lng;
}
} }

如图所示,所有Getter和setter方法都匹配。由于它是一个返回对象的列表,我不知道为什么会抛出此错误

代码访问层的方式:

@SuppressWarnings("rawtypes")
        DataWrapper dataWrapper = new DataWrapper();

        Location location = dataWrapper.getResults().getGeometry().getLocation();

您的映射已关闭,因为目标类中映射的数据层次结构与JSON结构不匹配。
name
location
字段在JSON中处于不同的级别,并且这两个字段都不在要映射的根级别。如果要使用“强类型”进行序列化,则需要定义更多的类。更接近于此:

public class Location {
    private Double lat;
    private Double lng;

    // Constructors, getters, setters
}

public class Geometry {
    private Location location;

    // Constructors, getters, setters
}

public class GeoResult {
    private String id;
    private Geometry geometry;
    private String name;

    // Constructors, getters, setters
}

public class DataWrapper {
    private List<GeoResult> results;

    // Constructors, getters, setters
}

你能添加从JSON加载GeoName对象的代码吗?@ianhanniballake我添加了用于返回用于映射的JSON结果对象的方法。回答得很好,谢谢。只是想让我的头脑清醒一下。所以基本上我需要将JSON响应的每一级分解成一个类?获取和设置每个“属性”,即lat和long?是的,当反序列化为一个类型时,需要将JSON中的每个级别映射为一个类。再次感谢,这很有意义。我可以看到类的各个层是如何链接在一起生成JSON“层”的,但im现在坚持的是检索lat和long本身的方法。我已将“geometry”类放在GeoName类中。我是否需要创建DataWrapper类的新实例来检索lat和long?或者是从该位置对象(即location.lat和location.lng)获取lat和long的情况?我包含了一行代码,说明如何获取任何特定结果/几何体实例的“lat”和“long”字段。我已按当前状态编辑了代码。location类的对象路径当前引发了一个错误,该列表未定义。Eclipse正在检测Get经度()和getLatitude()方法,但它们应该是getLat()和getLng()。对于所有的问题,我感到抱歉,但是JSON和以这种方式访问类对我来说有点陌生。
public class Location {
    private Double lat;
    private Double lng;

    // Constructors, getters, setters
}

public class Geometry {
    private Location location;

    // Constructors, getters, setters
}

public class GeoResult {
    private String id;
    private Geometry geometry;
    private String name;

    // Constructors, getters, setters
}

public class DataWrapper {
    private List<GeoResult> results;

    // Constructors, getters, setters
}
Location location = dataWrapper.getResults(0).getGeometry().getLocation();