Fehler ist:Parsing JSON - Modellschema
Methode 'java.lang.NullPointerException' Ausnahme ausgelöst hat. Kann nicht ausgewertet werden pl.netizens.eonbeacon.storage.EonBeaconModel.toString()
Ich versuche JSON mit Retrofit zu parsen. Ich habe JSON vom Server erhalten, die wie folgt aussieht:
{
"data": {
"list": [
{
"id": 58,
"beacon_id": "58",
"bridge_id": null,
"mesh_id": null,
"name": "eon_3c",
"location": "abcdlk",
"mac_address": "3c:cf:82:8a:e7:fe",
"firmware": "2.1",
"pcb_revision": "2.0",
"battery_level": "99",
"password": "0000",
"ib": {
"turn_on": "1",
"major": "33",
"minor": "344",
"tx_power": "7",
"interval": "400",
"uuid": "dae19960-18ea-11e5-8ff0-0002a5d5c521",
"secure_uuid": "0"
},
"euid": {
"turn_on": "0",
"namespace": null,
"instance": null,
"tx_power": null,
"interval": null
},
"eeid": {
"turn_on": "0",
"tx_power": null,
"interval": null
},
"eurl": {
"turn_on": "0",
"tx_power": null,
"interval": null,
"url": null
},
"etlm": {
"turn_on": "0",
"tx_power": null,
"interval": null
},
"assigned_bridge_id": null
},
{
"id": 56,
"beacon_id": "56",
"bridge_id": null,
"mesh_id": null,
"name": "Eon_e6",
"location": "test",
"mac_address": "e6:f5:8a:94:b8:c7",
"firmware": "2.1",
"pcb_revision": "2.0",
"battery_level": null,
"password": "0000",
"ib": {
"turn_on": "1",
"major": "2591",
"minor": "0",
"tx_power": "10",
"interval": "2593",
"uuid": "dae19960-18ea-11e5-8ff0-0002a5d5c521",
"secure_uuid": "0"
},
"euid": {
"turn_on": "0",
"namespace": null,
"instance": null,
"tx_power": null,
"interval": null
},
"eeid": {
"turn_on": "0",
"tx_power": null,
"interval": null
},
"eurl": {
"turn_on": "0",
"tx_power": null,
"interval": null,
"url": null
},
"etlm": {
"turn_on": "0",
"tx_power": null,
"interval": null
},
"assigned_bridge_id": null
},
{
"id": 57,
"beacon_id": "57",
"bridge_id": "13",
"mesh_id": "278",
"name": "Marta B",
"location": "lk",
"mac_address": "e1:4b:64:c3:80:e2",
"firmware": "2.1",
"pcb_revision": "2.0",
"battery_level": "97",
"password": "0000",
"ib": {
"turn_on": "1",
"major": "325",
"minor": "10",
"tx_power": "8",
"interval": "610",
"uuid": "dae19960-18ea-11e5-8ff0-0002a5d5c521",
"secure_uuid": "0"
},
"euid": {
"turn_on": "0",
"namespace": null,
"instance": null,
"tx_power": null,
"interval": null
},
"eeid": {
"turn_on": "0",
"tx_power": null,
"interval": null
},
"eurl": {
"turn_on": "0",
"tx_power": null,
"interval": null,
"url": null
},
"etlm": {
"turn_on": "0",
"tx_power": null,
"interval": null
},
"assigned_bridge_id": null
}
]
},
"ver": 1,
"time": 1475671202,
"status": 1,
"status_msg": ""
}
Meine Wurzel Response-Klasse sieht wie folgt aus:
public class BasicResponse<T> {
@Expose
public T data;
@Expose
public int ver;
@Expose
public long time;
@Expose
public byte status;
@Expose
public String status_msg;
}
Zu diesem Moment, alles sieht gut aus. Jetzt versuche ich, Daten zu analysieren:
Hier beginnt das Problem. Alles ist gut pars, außer den Objekten - euid, eeid, eurl, etlm, ib. Wenn ich ihre Klassennamen ändere Retrofit parse alles gut außer ihnen - sie sind null. Wenn ich Klassennamen ändere, um mit dem Schlüssel von JSON übereinzustimmen, habe ich Nachrüstungsfehler. Ich habe POJO benutzt und es hat eine sehr ähnliche Klasse wie meine geschaffen. Irgendeine Idee wo ist das Problem? :/
Hier ist mein Retrofit Aufruf:
@Subscribe
public void getUserBeacons(GetBeaconsListCommand command) {
Callback<BasicResponse<BeaconsListResponse>> callback = new Callback<BasicResponse<BeaconsListResponse>>() {
@Override
public void success(BasicResponse<BeaconsListResponse> basicResponse, Response response) {
if (ResponseStatus.SUCCESS.statusCode == basicResponse.status)
EventBus.post(new BeaconsListFetchedEvent(basicResponse.data));
else
EventBus.post(new NetworkFailureEvent(ResponseStatus.getByStatus(basicResponse.status), basicResponse.status_msg));
}
@Override
public void failure(RetrofitError error) {
}
};
service.beaconsList(callback);
}
EUID, Eeid Modelle:
public class EuidModel extends Model {
@Expose
public boolean turn_on;
@Expose
public String namespace;
@Expose
public String instance;
@Expose
public int tx_power;
@Expose
public long interval;
public boolean isTurn_on() {
return turn_on;
}
public void setTurn_on(boolean turn_on) {
this.turn_on = turn_on;
}
public String getNamespace() {
return namespace;
}
public void setNamespace(String namespace) {
this.namespace = namespace;
}
public String getInstance() {
return instance;
}
public void setInstance(String instance) {
this.instance = instance;
}
public int getTx_power() {
return tx_power;
}
public void setTx_power(int tx_power) {
this.tx_power = tx_power;
}
public long getInterval() {
return interval;
}
public void setInterval(long interval) {
this.interval = interval;
}
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
public class EeidModel extends Model {
@Column
public boolean turn_on;
@Column
public int tx_power;
@Column
public int interval;
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
Vielleicht möchten Sie den 'RetrofitError' protokollieren und dann zu Ihrer Frage hinzufügen –
Und was ist' BeaconsListResponse'? –
öffentliche Klasse BeaconsListResponse { @Expose öffentliche Liste -Liste; } –
Bartos