无法映射纬度和经度位置

时间:2013-02-25 21:15:29

标签: java android json api google-maps

编辑:

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

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

The method getGeometry() is undefined for the type List.

我通过显示'getLongitude()'和'getLatitude()'方法让Eclipse自动完成位置对象,但它们应该是'getLat()'和'getLng()'方法。

我看到按顺序访问对象是如何允许我得到long和lat但仍然是上面的错误引发了我。

以下是我的serpate JSON课程:

Datawrapper:

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);
}

}

GeoName类:

package com.example.restfulweb;

public class GeoName {

private String id;
private Geometry geometry;
private String name;

public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public Geometry getGeometry() {
    return geometry;
}
public void setGeometry(Geometry geometry) {
    this.geometry = geometry;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

}

几何类:

package com.example.restfulweb;

public class Geometry {
private Location location;

public Location getLocation() {
    return location;
}

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

}

位置等级:

package 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();

1 个答案:

答案 0 :(得分:0)

您的映射已关闭,因为目标类中映射的数据层次结构与JSON结构不匹配。 namelocation字段位于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数据反序列化为DataWrapper类现在应该以与数据的自然层次结构匹配的方式填充对象层次结构。您可以使用类似以下代码检索位置数据:

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