2010-11-22 1 views
2

配列内の文字列を取得しようとしている間に、NullPointerExceptionが発生し続けます(ベクター内にカプセル化されています)。私は起こってからのエラーを停止するように見えることはできません。それは単純なものでなければなりませんが、私はそれをあまりにも長く見ていると思います。確かに別の目を使うことができます。ここに私のコードは次のとおりです。java array nullpointerexceptionに関するヘルプ

Vector<Event> details = vector.get(i).getEvent(); 

for (int x = 0; x < details.size(); x++) { 
     Event eDetails = details.get(x); 

     person = eDetails.getEventPerson(); 
     place = eDetails.getEventPlace()[0]; 
     time = eDetails.getEventTime()[0]; 

} 

だから私は(xが0の場合)にNullPointerExceptionがスローされeDetails.getEventTime、から返される配列内の位置0にある項目を取得しようとします。

xが0の場合、getEventTime()配列の位置0の配列要素は空の文字列ですが、null値ではありません。 xが1または2の時など、私はちょうどいい時間を取得することができます。

**System.out.println(eDetails.getEventTime.length);** 

or 

String result; 

**if(eDetails.getEventTime[0] == null){** 
     result = ""; 
} else { 
     result = eDetails.getEventTime[0]; 
} 

任意のアイデア:

問題は、私は、次のようなことをしようとすると、私はまだNullPointerExceptionが受け取るということですか?

ありがとうございます!

+1

2番目のコードブロックで 'getEventTime()[0]'を意味すると思いますか?また、オブジェクトをどのように埋め込むかを実際には示していません。 – Jeremy

+0

@Jeremy 'getEventTime()[0]'は 'getEventTime [0]'がコンパイルされないので(メソッドは配列ではありません)、 – extraneon

+0

@extraneon - 私はそれを知っています。それが私が想定した理由です。私はOPと明確にしようとしていた。しかし、OPにpublicインスタンス変数 'getEventTime'があれば、どうでしょうか? – Jeremy

答えて

2

はあなたの第二の例では確認されており、それはすべきではない:

if(eDetails.getEventTime() == null)

の代わりに:

if(eDetails.getEventTime[0] == null)

あなたはときに、あなたが[0]をオフのままにしてください作っていますヌルチェックを行いますか?

eDetails.getEventTime()戻りnull機能場合は、eDetails.getEventTime()[0];

1

をしようとするとき、あなたはNullPointerExceptionを得るでしょう、あなたがdetails.get(0).getEventTime()を取得するときに返された配列がnullであると思われます。

+0

配列(またはnull)も返すので、nullを返す 'details.get(0).getEventPlace()'でもかまいません。 – extraneon

0

これを理解する最も簡単な方法は次のとおりです。

Vector<Event> details = vector.get(i).getEvent(); 

for (int x = 0; x < details.size(); x++) { 
     Event eDetails = details.get(x); 
     if (eDetails == null) { 
      throw new NullPointerException("eDetails on pos " + x + " is null"); 
     } 

     person = eDetails.getEventPerson(); 
     Something[] places = Details.getEventPlace(); 
     if (places == null) { 
      throw .... 
     } 
     place = eDetails.getEventPlace()[0]; 

     Something[] times = eDetails.getEventTime(); 
     if (times == null) { 
      throw .... 
     } 
     time = eDetails.getEventTime()[0]; 
} 

それは見栄えではないかもしれないが、少なくともそれは有益です。

関連する問題