I am having problem with this contact retrieving code. The function getContact() is retuning 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;
Most likely reason for NPE you are getting is is that
clist
value is null in thegetContact
method. Most likely reason for this is, in turn, some exception that happens inContactExtract()
constructor.But one would never know that for sure as long as you swallow exceptions. If you're interested, search the web for something like java swallow exceptions to learn in more details why this is bad.
Meanwhile, the most straightforward way to find out what happened is to add appropriate logging everywhere in your code, first of all in the catch blocks. Make sure there are no statements like
catch(Exception e){}
and your reward will be much easier understanding on what went wrong.In constructor, replace empty catch block with something like:
In getContat method, do about the same, only with appropriate log message:
Then, re-run the code in emulator and look into its console to find out what went wrong.
Another thing worth adding in the code is checking, logging and handling for possible null values. In
getContact()
method,clist
can be null and cause you all the kind of trouble but you don't even try to check and handle that.