【发布时间】:2017-02-16 03:00:47
【问题描述】:
错误是:
方法抛出“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。当我更改他们的类名时,改造解析除了他们之外的一切都很好 - 他们是空的。当我更改类名以与 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是什么? -
公共类 BeaconsListResponse { @Expose public List
列表; } -
错误是:方法抛出了“java.lang.NullPointerException”异常。无法评估 pl.netizens.eonbeacon.storage.EonBeaconModel.toString()
-
请edit您对堆栈跟踪的问题
标签: android json nullpointerexception gson retrofit