Исключение нулевого указателя при получении контактов в 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();
}
Вы узнаете, что не так в коде.