2015-07-15 6 views
1

Я разрабатываю приложение для Android, используя «Дооснащение», и пытаюсь решить эту проблему. неGson: анализировать объекты в массиве внутри объекта

Бэкэнд ребята до вчерашнего отослано мне следующий ответ:

[ 
    {"id":1,"key1":"value1", "key2":"value2"}, 
    {"id":2, "key1":"value1", "key2":"value2"} 
] 

Теперь это изменение хочешь, что это:

{"response": 
    [ 
     {"id":1,"key1":"value1","key2":"value2"}, 
     {"id":2,"key1":"value1","key2":"value2"} 
    ], 
"page":1, 
"count":2 
} 

Так, в основном, они посылают мне массив с объекты внутри «ответа», а затем некоторые метаданные о пейджинге.

Теперь, мой вопрос: как я могу разобрать это с помощью Gson?

В настоящее время мой код:

POJO:

public class MyObject{ 

    private int id; 
    private String key1; 
    private String key2; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getKey1() { 
     return key1; 
    } 

    public void setKey1(String key1) { 
     this.key1 = key1; 
    } 

    public String getKey2() { 
     return key2; 
    } 

    public void setKey2(String key2) { 
     this.key2 = key2; 
    } 
} 

модифицированное интерфейс:

public interface Api { 

    @GET("/route") 
    void listObjects(Callback<List<Object>> callBack); 

} 

Вот как я инициализировать дооснащения:

RestAdapter restAdapter = new RestAdapter.Builder() 
     .setEndpoint("http://example.com") 
     .setLogLevel(RestAdapter.LogLevel.FULL) 
     .build(); 

api = restAdapter.create(Api.class); 

И как я потребляю е его:

public void getObjects(final Handler handler) { 
    api.listObjects(new retrofit.Callback<List<Object>>() { 
     @Override 
     public void success(List<Object> objects, retrofit.client.Response response) { 
      handler.onSuccess(objects); 
     } 

     @Override 
     public void failure(RetrofitError error) { 
      handler.onError(); 
     } 
    }); 
} 

Так что я хочу разобрать, но я не могу понять, как сделать это с Модернизированный и Gson.

Заранее благодарен!

+0

Означает ли это, если вы меняете следующее на всеобщее обозрение? private int id; private String key1; private String key2; –

+0

Я только что добавил дополнительную информацию о фонде, чтобы объяснить ее лучше. Благодаря! –

ответ

1

Использование This сайт Я создал эти pojos.

Внешний класс

package com.example; 

import java.util.ArrayList; 
import java.util.List; 
import javax.annotation.Generated; 
import com.google.gson.annotations.Expose; 


public class Response { 

@Expose 
private List<Response_> response = new ArrayList<Response_>(); 
@Expose 
private Integer page; 
@Expose 
private Integer count; 

/** 
* 
* @return 
* The response 
*/ 
public List<Response_> getResponse() { 
return response; 
} 

/** 
* 
* @param response 
* The response 
*/ 
public void setResponse(List<Response_> response) { 
this.response = response; 
} 

/** 
* 
* @return 
* The page 
*/ 
public Integer getPage() { 
return page; 
} 

/** 
* 
* @param page 
* The page 
*/ 
public void setPage(Integer page) { 
this.page = page; 
} 

/** 
* 
* @return 
* The count 
*/ 
public Integer getCount() { 
return count; 
} 

/** 
* 
* @param count 
* The count 
*/ 
public void setCount(Integer count) { 
this.count = count; 
} 

} 

Внутренний класс

package com.example; 

import javax.annotation.Generated; 
import com.google.gson.annotations.Expose; 

public class Response_ { 

@Expose 
private Integer id; 
@Expose 
private String key1; 
@Expose 
private String key2; 

/** 
* 
* @return 
* The id 
*/ 
public Integer getId() { 
return id; 
} 

/** 
* 
* @param id 
* The id 
*/ 
public void setId(Integer id) { 
this.id = id; 
} 

/** 
* 
* @return 
* The key1 
*/ 
public String getKey1() { 
return key1; 
} 

/** 
* 
* @param key1 
* The key1 
*/ 
public void setKey1(String key1) { 
this.key1 = key1; 
} 

/** 
* 
* @return 
* The key2 
*/ 
public String getKey2() { 
return key2; 
} 

/** 
* 
* @param key2 
* The key2 
*/ 
public void setKey2(String key2) { 
this.key2 = key2; 
} 

} 

Тогда вызов Api выглядит следующим образом.

public interface Api { 

@GET("/route") 
void listObjects(Callback<Response> callBack); 

} 
+1

Ницца! Спасибо за ссылку! Это похоже на хорошее решение, но если у меня есть другие объекты, которые отправляются одинаковым образом, должен ли я выполнять внешний класс для каждого типа объектов? Пусть они посылают мне: { "ответ": [ { "ID": 1, "key1": "value1", "key2": "значение2", "ключ3": "value3"}, {"id": 2, "key1": "value1", "key2": "value2", "key3": "value3"} ], "page": 1, "count": 2 } Заранее благодарим! –

+0

Если это разные типы объектов, то да, вы должны создать новое pojo для каждого типа объекта.Если это один и тот же объект с меньшим количеством ключей, просто поместите все ключи в объект, который у вас может быть. Если ключ отсутствует, gson вернет значение null для этого значения. – doubleA

+0

Ницца, спасибо вам! –

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