исключение нулевого указателя при извлечении контактов в j2me

У меня проблема с кодом получения этого контакта. Функция getContact() перенастраивается на ноль.

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;

person Devashish Raverkar    schedule 10.08.2012    source источник


Ответы (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 может быть нулевым и вызывать у вас всевозможные проблемы, но вы даже не пытаетесь проверить и обработать это.

person gnat    schedule 10.08.2012

Всегда пытайтесь печатать Exception e.

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

Вы узнаете, что не так в коде.

person Jignesh    schedule 10.08.2012