2012-08-10 113 views
1

我遇到了此聯繫人檢索代碼的問題。函數getContact()將重新調用null。在j2me中檢索聯繫人時出現空指針異常

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最有可能的原因是getContact方法中的clist值爲空。最可能的原因是反過來,ContactExtract()構造函數中發生了一些異常。

但是人們永遠不會知道,只要你吞下異常。如果你有興趣,可以在網上搜索,例如java swallow exceptions,以便更詳細地瞭解爲什麼這是糟糕的。同時,找出發生的事情最直接的方法是在代碼中隨處添加適當的日誌記錄,首先在catch塊中添加適當的日誌記錄。確保沒有像catch(Exception e){}這樣的陳述,你的獎勵將會更容易理解錯誤發生的原因。

catch(Exception e){ 
    Sustem.out.println("exception in openPIMList: [" + e + "]"); 
} 

在getContat方法,做差不多的,只有相應的日誌消息:

catch(Exception e){ 
    Sustem.out.println("exception in getContact: [" + e + "]"); 
} 

然後,重新運行

在構造函數中,有像更換空的catch塊在模擬器中編寫代碼並查看其控制檯以查明哪裏出了問題。

值得在代碼中添加的另一件事是檢查,記錄和處理可能的空值。在getContact()方法中,clist可以爲空,並且會導致所有類型的問題,但是您甚至不嘗試檢查並處理該問題。

1

總是嘗試打印異常e。

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

您將會知道代碼中的錯誤。