1

我在使用此联系人检索代码时遇到问题。函数 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;
4

2 回答 2

2

您获得 NPE 的最可能原因是clist该方法中的值为 null getContact。反过来,最可能的原因是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 并给您带来各种麻烦,但您甚至不会尝试检查和处理它。

于 2012-08-10T14:59:10.697 回答
1

总是尝试打印异常 e。

catch(Exception e)
{
    e.printStackTrace();
}

你会知道代码有什么问题。

于 2012-08-10T14:40:49.267 回答