检索j2me中的联系人时出现空指针异常

时间:2012-08-10 14:36:52

标签: java-me nullpointerexception jsr75

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

2 个答案:

答案 0 :(得分:2)

您获得的NPE最可能的原因是clist方法中getContact值为空。反过来,最有可能的原因是ContactExtract()构造函数中发生的一些异常。

但只要你吞下异常就永远不会知道这一点。如果您有兴趣,可以在网上搜索 java swallow exceptions 之类的内容,详细了解为什么这样做不好。

同时,找出发生的事情最直接的方法是在代码中的任何地方添加适当的日志记录,首先是在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可以为空,并且会给您带来各种麻烦,但您甚至不会尝试检查和处理它。

答案 1 :(得分:1)

始终尝试打印例外e。

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

你会知道代码中的错误。