我调用了Web服务方法,该方法提供了学生信息列表。
StudentsInfo si = getInfo(username, rollno, class); // web service method invoked
Hashtable hashStudList = new Hashtable();
int size = si.getInfo().size();
for (int i=0;i<size;i++) {
StudentsList st = new StudentsList();
String ID = si.getInfo().get(i).getStId().toString();
st.setId(ID);
st.setName(si.getInfo().get(i).getStName().toString());
st.setAddress(si.getInfo().get(i).getStAddress().toString());
st.setPhone(si.getInfo().get(i).getStPhone().toString());
// ...
hashStudList.put(ID, st);
}
StudentsList是包含getter和setter的bean类。 但它在
处给出了空指针异常String ID = si.getInfo().get(i).getStId().toString();
执行时。
答案 0 :(得分:3)
NullPointerException
,但实际上并不存在实例 - 因此您要处理的对象是null
以这一行为例:
String ID = si.getInfo().get(i).getStId().toString();
这可能会在几个地方出错:
String ID = si.getInfo().get(i).getStId().toString();
// Possible nulls ^ ^ ^ ^
si
可以是null
- &gt;无法在其上调用.getInfo()
getInfo()
返回的值为null
- &gt;无法在其上调用.get(i)
get(i) is
null -> can't invoke
。getStd()`返回的值getStd()
返回的值为null
- &gt;无法在其上调用.toString()
所有这些都会在同一行上抛出NPE
。
这不好,但你应该逐一检查null
的所有这些内容。根据业务逻辑,您可能希望以不同的方式处理某些情况,例如,当其中一个为空时抛出某种异常,等等......
if(si!=null) {
StudentInfo info = si.getInfo; //using local variable to store value for readability
if(info!=null) {
//... and so on
}
else {
throw new MyBusinessException("Info must not be null!");
}
}
此外,这可能是减少代码重复的一个很好的选择。您不必每次都写出所有这些si.getInfo().get(i).getStId().
:您可以使用局部变量来存储导航的中间值。
<强>哈希表强>
Hashtable是一件旧事,你不应该用于新东西。它已被弃用。取而代之的是,请使用Map接口以及此用例的相应实现:HashMap类。此外,通过泛型,它提供了更方便的语法,省去了演员。
Map<String, StudentList> myMap = new HashMap<String, StudentList>();
....
myMap.put(id, studentList);
也建议考虑
答案 1 :(得分:1)
st.setName(si.getInfo().get(i).getStName().toString());
st.setAddress(si.getInfo().get(i).getStAddress().toString());
st.setPhone(si.getInfo().get(i).getStPhone().toString());
您是否设置了StAddress的值,StPhone可能是get方法返回null,因为您最初没有为这些字段提供任何值。
请提供异常的堆叠
答案 2 :(得分:0)
这里有很多可能性;
1. StudentsInfo si = getInfo(username, rollno, class);
// Check if getInfo is returning a non null student info object?
2. String ID = si.getInfo().get(i).getStId().toString();
// Check for Student ID getStId()
// get(i)
// getInfo()