Исключение нулевого указателя при получении контактов в 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;

2 ответа

Решение

Наиболее вероятная причина получения NPE заключается в том, что clist значение равно нулю в 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 может быть нулевым и причинять вам массу неприятностей, но вы даже не пытаетесь это проверить и справиться.

Всегда пытайтесь распечатать исключение e.

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

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

Другие вопросы по тегам