1

この連絡先の取得コードに問題があります。関数getContact()は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;
4

2 に答える 2

2

取得しているNPEの最も可能性の高い理由はclist、メソッドの値がnullであるgetContactためです。これの最も可能性の高い理由は、ContactExtract()コンストラクターで発生するいくつかの例外です。

しかし、例外を飲み込む限り、それを確実に知ることはできません。興味がある場合は、Webで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 + "]");
}

次に、エミュレーターでコードを再実行し、コンソールを調べて、何が問題だったかを調べます。

コードに追加する価値のあるもう1つのことは、可能なnull値のチェック、ロギング、および処理ですgetContact()メソッドでは、nullになる可能性があり、あらゆる種類の問題が発生する可能性がありますが、それclistをチェックして処理しようとさえしません。

于 2012-08-10T14:59:10.697 に答える
1

常に例外 e を出力してみてください。

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

コードのどこが間違っているかがわかります。

于 2012-08-10T14:40:49.267 に答える