錯誤是:JSON解析與改造 - 模型架構
方法拋出 '顯示java.lang.NullPointerException' 例外。無法評估pl.netizens.eonbeacon.storage.EonBeaconModel.toString()
我嘗試解析JSON與改造。我從服務器看起來像這樣得到JSON:
{
"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": ""
}
我的根響應等級如下所示:
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;
}
那一刻,一切都看起來不錯。現在,我嘗試解析數據:
public class BeaconResponse {
@Expose
public int id;
@Expose
public long beacon_id;
@Expose
public long bridge_id;
@Expose
public long mesh_id;
@Expose
public String name;
@Expose
public String location;
@Expose
public String mac_address;
@Expose
public String firmware;
@Expose
public String pcb_revision;
@Expose
public byte battery_level;
@Expose
public String password;
@Expose
@SerializedName("ib")
public Ib ib;
@Expose
@SerializedName("euid")
public Euid euid;
@SerializedName("eeid")
@Expose
public Eeid eeid;
@SerializedName("eurl")
@Expose
public Eurl eurl;
@SerializedName("etlm")
@Expose
public Etlm etlm;
@Expose
public int assigned_bridge_id;
問題開始。一切都解析得很好,除了對象 - euid,eeid,eurl,etlm,ib。當我改變他們的類名稱retrofit解析一切都很好,除了他們 - 他們是空的。當我改變類名與JSON中的鍵匹配時,我有改進錯誤。我使用了POJO,它創建了與我的類非常相似的類。任何想法是哪裏的問題? :/
這裏是我的改裝電話:
@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型號:
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);
}
你可能想記錄'RetrofitError',然後加入你的問題 –
什麼是'BeaconsListResponse'? –
public class BeaconsListResponse { @Expose public List list; } –
Bartos