2013-02-25 2 views
1

Edit:Невозможно отобразить координаты широты и долготы posistions

Добавили соответствующие классы, чтобы иметь возможность доступа к каждому элементу слой массива JSON.

В настоящее время (по-прежнему) пытается получить доступ к местоположению. Я вызываю новый объект класса datawrapper, я вижу, как должна выполняться реализация кода для доступа к местоположению, но на данный момент я получаю ошибку из:

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

Я получаю Eclipse, автозаполнение объект местоположения, показывая 'getLongitude()' и 'getLatitude() методы, но они должны быть 'getLat()' и 'getLng()' методы.

Я вижу, как доступ к объектам в порядке, позволяет мне получить длинный и лат, но все же ошибка выше меня бросила.

Вот мои 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; 
} 

}

Расположение Класс:

пакет 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; 
} 

}}

Как показано все методы получения и установки соответствия. Как список возвращаемых объектов Im не уверен, почему эта ошибка возникает?

Как код стоит открыть слои:

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

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

0 Вы можете добавить код, который загружает объекты GeoName из JSON? – ianhanniballake

+0

@ianhanniballake Я добавил методы, используемые для возврата объекта результатов JSON, используемого для сопоставления. – user1352057

ответ

0

Ваши отображения выключены, в том, что иерархия данных, отображенных в целевом классе не соответствует структуре 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 в DataWrapper класс должен теперь заполнить вниз по иерархии объектов, таким образом, сопрягая естественную иерархию данных. Вы можете получить данные о местоположении с кодом, похожим на:

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

Отличный ответ спасибо. Просто пытаюсь разобраться во всем этом. Итак, в основном мне нужно разбить каждый уровень ответа JSON на класс? получать и устанавливать каждый атрибут, т. е. lat и long? – user1352057

+0

Да, при десериализации в тип вам нужно отобразить каждый уровень в JSON как класс. – Perception

+0

Большое спасибо, это имеет смысл. Я вижу, как слои классов соединяются вместе, чтобы создать слой JSON, но где im теперь застрял - это метод для извлечения lat и long. Я поместил класс «geometry» в класс GeoName. Нужно ли мне создавать новый экземпляр класса DataWrapper для извлечения lat и long? Или это случай получения lat и долгого от этого объекта местоположения i.e location.lat и location.lng? – user1352057

Смежные вопросы