我在这个联系人检索代码时遇到问题。函数 getContact() 正在重新调整 null。
private PIM pim;
private ContactList clist;
public ContactExtract(){
pim=PIM.getInstance();
try{
clist=(ContactList) pim.openPIMList(PIM.CONTACT_LIST,PIM.READ_ONLY);
}catch(Exception e){}
}
public Vector getContact(){
//ContactDetail cd[]= new ContactDetail[200];
Vector v=new Vector();
try{
Enumeration en=clist.items();
//String num=null;
//String temp[]=new String[2];
//int i=0;
while(en.hasMoreElements()){
Contact c=(Contact)en.nextElement();
v.addElement(c);
//temp=c.getStringArray(Contact.NAME, i);
//num=c.getString(Contact.TEL, i);
//cd[i]=new ContactDetail(temp[0],temp[1],num);
}
clist.close();
}catch(Exception e){}
return v;
您获得 NPE 的最可能原因是clist
getContact
方法中的值为 null。造成这种情况的最可能原因是,反过来,构造函数中发生了一些异常ContactExtract()
。
但只要你吞下例外,就永远不会知道。如果你有兴趣,可以在网上搜索类似java吞咽异常的东西,以更详细地了解为什么这是不好的。
同时,找出发生了什么的最直接方法是在代码中的各个位置添加适当的日志记录,首先是在 catch 块中。确保没有像catch(Exception e){}
这样的陈述,你的奖励将更容易理解出了什么问题。
在构造函数中,将空的 catch 块替换为以下内容:
catch(Exception e){
Sustem.out.println("exception in openPIMList: [" + e + "]");
}
在getContat方法中,仅使用适当的日志消息执行大致相同的操作:
catch(Exception e){
Sustem.out.println("exception in getContact: [" + e + "]");
}
然后,在模拟器中重新运行代码并查看其控制台以找出问题所在。
代码中值得添加的另一件事是检查、记录和处理可能的空值。在getContact()
方法中,clist
可以为 null 并给您带来各种麻烦,但您甚至不会尝试检查和处理它。
始终尝试打印异常 e。
catch(Exception e)
{
e.printStackTrace();
}
您将知道代码中出了什么问题。