Вам не нужно устанавливать сеттеры/конструкторы, вы должны использовать только аннотации.
Например, если ваш ответ сервера выглядит следующим образом:
{
"count": 12,
"devices": [{
"adb_url": null,
"owner": null,
"ready": true,
"serial": "XXXXXX",
"model": "GT-N7100",
"present": true
}, {
"adb_url": null,
"owner": null,
"ready": true,
"serial": "XXXXXX",
"model": "GT-I9500",
"present": true
}]
}
Вы должны создать класс устройств и класс устройств распределялись следующим образом: Класс
устройств:
import com.google.gson.annotations.SerializedName;
public class Device {
@SerializedName("adb_url")
String adbUrl;
@SerializedName("owner")
String owner;
@SerializedName("ready")
Boolean isReady;
@SerializedName("serial")
String serial;
@SerializedName("model")
String model;
@SerializedName("present")
Boolean present;
public Device(String adbUrl, String owner, Boolean isReady, String serial, String model, Boolean present) {
this.adbUrl = adbUrl;
this.owner = owner;
this.isReady = isReady;
this.serial = serial;
this.model = model;
this.present = present;
}
}
Устройства Тип ответа:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
import java.util.List;
/**
* Created by avilevinshtein on 01/01/2017.
*/
public class DeviceResponse {
@SerializedName("count")
int deviceSize;
@SerializedName("devices")
List<Device> deviceList;
public DeviceResponse() {
deviceSize = 0;
deviceList = new ArrayList<Device>();
}
public DeviceResponse(List<Device> deviceList) {
this.deviceList = deviceList;
deviceSize = deviceList.size();
}
public DeviceResponse(int deviceSize, List<Device> deviceList) {
this.deviceSize = deviceSize;
this.deviceList = deviceList;
}
public static DeviceResponse parseJSON(String response) {
Gson gson = new GsonBuilder().create();
DeviceResponse deviceResponse = gson.fromJson(response, DeviceResponse.class);
return deviceResponse;
}
}
P.S - Я использовал только контрагентов для удобства.
Если вам нужно создать сообщение POST, вы также должны создать DeviceRequest, который отражает структуру JSON, переданную в теле запроса.
Обратите внимание, что имя внутри @SerializedName («имя json-поля») должно быть реальным ключом JSON.
Спасибо за ответ, но если мне нужно изменить некоторые поля, как мне это сделать? В моем случае я получаю не совсем «четкие» данные (некоторые поля содержат html вместо обычного текста), и мне нужно их исправить. Конечно, я могу исправить их в getter, но я хотел бы исправить их непосредственно в самом объекте (в момент создания объекта). – Mikhail
@ Майкл, можете ли вы поделиться образцом ответа? Является ли ваш ответ форматом JSON? –
@Mikhail, Gson может работать с сеттерами только с v2.3 (https://github.com/google/gson/issues/232). В настоящее время Модернизация работает с пользовательской версией 2.1. https://search.maven.org/#search%7Cga%7C1%7Ccom.squareup.retrofit2 Если вы хотите работать с сеттерами, вам придется использовать джексон или другой конвертер. Я лично работал в прошлом с Джексоном, и это сработало. –