【发布时间】:2018-04-07 18:41:35
【问题描述】:
我在使用 GSON 库并尝试通过方法调用读取列表(或数组)以处理数据时遇到空指针异常-
从外部获取的 JSON 对象称为 Analytics(我稍后定义为一个类),并具有诸如制造商(一个字符串)和 usage_statistics(我在下面定义的一个类)之类的成员。分析(数据)看起来像
{
"manufacturer": "Motorola",
"market_name": "Moto G4 Play",
"codename": "harpia",
"model": "Moto G Play",
"usage_statistics": {
"session_infos": [{
"building_id": 17,
"purchases": [{
"item_id": 9,
"item_category_id": 9,
"cost": 69.98
}, {
"item_id": 81,
"item_category_id": 6,
"cost": 113.81
}]
}, {
"building_id": 18,
"purchases": [{
"item_id": 180,
"item_category_id": 0,
"cost": 42.98
}]
}, {
"building_id": 16,
"purchases": [{
"item_id": 78,
"item_category_id": 3,
"cost": 30.78
}, {
"item_id": 30,
"item_category_id": 0,
"cost": 101.77
}, {
"item_id": 171,
"item_category_id": 6,
"cost": 46.61
}]
}]
}
}
设计是
[usage_statistics 是一个类,其成员 session_infos 是 session_info 对象的列表。每个 session_info 对象由一个建筑物 ID 和一个购买类型的对象列表组成。每个购买对象都有一个 item_id、item_category_id 和 cost,都是字符串。]
最后一行出错的代码是
java.lang.reflect.Type collectionType = new TypeToken<List<analytics>>(){}.getType();
list_analytics lcs = new list_analytics();
List<analytics> analytics = new Gson().fromJson(inline, collectionType);
for(analytics E : analytics) {
System.out.println(E.getManf());//displays "Motorola"
System.out.println(E.getsis());
session_info_arr = (E.getsis()).getsession_infos();
//...
}
(我在 .getsession_infos() 部分遇到异常。我不确定为什么 .getsession_infos() 不提取列表。)
代码:
public class analytics {
private String manufacturer;
private usage_statistics usage_statistics;
public String getManf() {
return manufacturer;
}
public usage_statistics getsis() {
return usage_statistics;
}
}
public class usage_statistics {
private List<session_info> session_info_arr;
public List<session_info> getsession_infos() {
List<session_info> arr = new ArrayList<session_info>(Collections.<session_info>emptyList());
arr = session_info_arr;
return arr;
}
}
public class session_info {
private int id;
private List<purchase> purchase_arr;
public int getbid() {
return id;
}
public List<purchase> getPurchase() {
List<purchase> arr = new ArrayList<purchase>();
arr = purchase_arr;
return purchase_arr;
}
}
【问题讨论】:
-
添加你的堆栈跟踪
-
@njzk2 如何获得完整的堆栈跟踪?我删除了“限制控制台输出”选项,但输出相同。
-
你得到了什么输出?
标签: java nullpointerexception gson json-deserialization