2013-09-26 2 views
1

Во-первых, im the begiiner в GSON, поэтому, пожалуйста, несите меня.Как получить значение переменной от Gson

У меня есть набор классов с этой структурой:

class Response 
    Data data; 

class Data 
    List<Item> items; 

class Item 
    String id; 
    String title; 
    Private Player; 

class Player 
    String mobile; 

Im используя тот класс для извлечения JSON с библиотекой GSON.

Я успешно восстановить данные в формате JSON с этим кодом:

Gson gson = new Gson(); 
Response myResponse = gson.fromJson(inputStreamReader, Response.class); 

Когда я отладка коды, я могу увидеть значение Item класса успешно получено внутри myResponse. Однако у меня есть проблема, когда я хочу получить доступ к переменной title в классе Item, потому что все, что у меня есть, - это класс Response.

Как получить переменную title в классе Item?

Подходит любая помощь, спасибо за помощь.

ответ

2

Если у вас есть public атрибуты (!, Которые, как правило, a bad practice), вы можете просто сделать:

//This will iterate over all items 
for (Item item : myResponse.data.items) { 
    //for each item now you can get the title 
    String title = myItem.title; 
} 

Во всяком случае, как я уже говорил, вы должны сделать свои атрибуты private и имеют getters and setters для этих атрибутов , Это основа Java!

А именно, в вашем Response классе, вы должны иметь что-то вроде:

private Data data; 

public Data getData(){ 
    return this.data; 
} 
public void setData(Data data){ 
    this.data = data; 
} 

Таким же образом, вы должны иметь private атрибуты и методы получения и установки во всех классах.

Итак, теперь вы можете получить доступ к детали надлежащим образом с:

//Get the Data object with the getter method 
Data data = myResponse.getData(); 
for (Item item : data.getItems()) { 
    String title = myItem.getTitle(); 
} 
+0

+1 но я бы не стал добавлять сеттеры, если они не были необходимы, GSON не требует их. – Jonathan

+0

@ Джонатан: ты можешь быть прав, я не эксперт. Но я обычно делаю прямо противоположное: у меня бы не было публичных атрибутов *, если они не были необходимы *;) Может быть, это просто привычка ... – MikO

+0

@MikO Снова, спасибо большое за вашу помощь: D Слишком плохо, что я могу upvote один раз. –

2

Вы можете получить данные, как это: -

Data myData = myResponse.getData(); 
for(Item myItem : myData.getItems()){ 
    // myItem.getTitle(); will give you the title from each Item 
} 

Это предполагает, что вы имеете добытчиками для всех полей классов.

+0

Спасибо за вашу помощь. Я получаю логику, но я запутался, как ее реализовать. Каким должен быть метод getData в классе Response? Мой текущий класс ответа имеет только этот код: общедоступный Данные данных; \t \t общественный отзыв() { \t \t данные = новые данные(); \t} –

+0

'public Data getData() {return this.data;}' - Это должен выглядеть ваш метод getData! – SudoRahul

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