2016-05-26 47 views
0

私はメッセージの配列を持っているという要件があります。だから私はそれらからメッセージを返すしたい。誰も私にそれをやる方法を助けることができますか?メッセージの配列から単一のメッセージを返す

public static Message getContent(String user, String pswd, String sub, String to) 
     throws MessagingException, IOException { 
    Session imapSession1 = TestMail.greenMail.getImap().createSession(); 
    Store store = imapSession1.getStore("imap"); 
    store.connect("foo", "password"); 
    Folder inbox = store.getFolder("INBOX"); 
    inbox.open(Folder.READ_ONLY); 
    // Getting only unread messages. 
    Flags flags = new Flags(); 
    flags.add(Flag.SEEN); 
    FlagTerm flagTerm = new FlagTerm(flags, false); 
    Message[] msgs = inbox.search(flagTerm); 
    Message ms = msgs[0]; 
    return ms; 

} 

私は上記のように最初のメッセージを返すようにしようとしたが、それははIndexOutOfBoundsExceptionを投げている:0 だから、誰もこれで私を助けることができます。前もって感謝します。

+0

つまり、 'inbox.search'は空の配列を返しています。私たちはあなたにそれを手助けすることはできません。 –

答えて

0

受信トレイを検索した後にmsgsが空の場合は、先にコードに問題がありますが、未読のメッセージはありません。最初にmsgs.length > 0を確認してから、必要なものを決定する必要があります。行う。オプション(Java8の機能と一致するようにメソッドシグネチャを変更する必要があります)を返すか、必要に応じてnullを返すか例外をスローします。 3つのシナリオはすべて、呼び出しコードで適切な処理が必要です。

未読メッセージがあるときにコードが呼び出されない限り、Exceptionをスローすることは正しいアプローチではないことに注意してください。

+0

大丈夫です。しかし、私は私のtestngクラスでこのコードを使用すると、それは1つのメッセージがあることを示しています。私はそれを静的な文字列として渡しています。しかし、私は私のtestngクラスのその実装を通常のクラスに移し、そのメソッドを呼び出そうとします。それは私にそのエラーを与えている。 –

+0

あなたの質問の焦点が間違っていると思いますので、反論できない事実は 'msgs'が空であるということです。代わりに、あなたのtestng実装が何であるか(上記のコードと同様)と**なぜ** 'msgs'が空であるかに焦点を当てた質問を投稿する必要があります。 – haggisandchips

+0

私はそれをデバッグし、私はclassnotがデバッガで例外をロードしたのを見た。 'org.eclipse.debug.core.DebugException:com.sun.jdi.ClassNotLoadedException:型がロードされていません。配列のコンポーネント型を取得中に発生しました。 ' –

関連する問題