javamail store.isconnected()函数bug

时间:2015-03-28 17:22:41

标签: java android javamail

我在javamail商店isConnected()函数中遇到了一个非常奇怪的错误。我在我的Android应用程序中使用它,如果连接断开,则重新连接到存储。

if (!store.isConnected()) store.connect(host, username, password);

但是,当连接断开时,此函数在第一次调用时返回 true ,第二次调用时返回 false 。这意味着如果没有连接存储,上面的代码将不会触发store.connect,但是这段代码:

if (!store.isConnected()) store.connect(host, username, password);
else if (!store.isConnected()) store.connect(host, username, password);
由于第二次调用返回false的isConnected()函数,

将重新连接存储。

我不知道我是否解释了好的错误。 我想知道这是否是已知的行为。也许,我做错了什么。或者,如果商店断开连接,也许有更好的方法可以重新连接商店。

提前谢谢!

编辑:

此代码:

LOGGER.warning("START1");
if (!store.isConnected()) {
    LOGGER.warning("START1 CONN");
    store.connect(host, username, password);
    LOGGER.warning("END1 CONN");
}
LOGGER.warning("END1");
LOGGER.warning("START2");
if (!store.isConnected()) {
    LOGGER.warning("START2 CONN");
    store.connect(host, username, password);
    LOGGER.warning("END2 CONN");
}
LOGGER.warning("END2");

在javamail debug中输出:

03-29 15:52:13.162: W/ShowMailbox(2063): START1
03-29 15:52:15.238: I/System.out(2063): IMAP DEBUG: IMAPProtocol noop
03-29 15:52:15.238: I/System.out(2063): A57 NOOP
03-29 15:52:15.242: I/System.out(2063): DEBUG: IMAPStore connection dead
03-29 15:52:15.242: I/System.out(2063): DEBUG: IMAPStore cleanup, force true
03-29 15:52:15.242: I/System.out(2063): DEBUG: IMAPStore cleanup done
03-29 15:52:22.810: W/ShowMailbox(2063): END1
03-29 15:52:24.762: W/ShowMailbox(2063): START2
03-29 15:52:34.033: W/ShowMailbox(2063): START2 CONN
03-29 15:52:36.369: I/System.out(2063): * OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE STARTTLS] Courier-IMAP ready. Copyright 1998-2008 Double Precision, Inc.  See COPYING for distribution information.
03-29 15:52:36.369: I/System.out(2063): A0 CAPABILITY
...
03-29 15:52:37.857: I/System.out(2063): A3 OK LOGIN Ok.
03-29 15:52:38.053: I/System.out(2063): IMAP DEBUG: AUTH: PLAIN
03-29 15:52:39.297: W/ShowMailbox(2063): END2 CONN
03-29 15:52:40.885: W/ShowMailbox(2063): END2

看起来第一次调用isConnected()被执行但是即使store没有连接也返回true,第二次isConnected()根本没有被执行!但它执行connect()函数!?

我真的很困惑。有点害怕...... :)

2 个答案:

答案 0 :(得分:0)

您可能遇到了JavaMail 1.4.2中修复的错误。您应该能够使用newest version of JavaMail以及additionnal.jar和activation.jar文件。

答案 1 :(得分:0)

从不同线程共享同一IMAPStore对象并在池中建立一个连接时,您可能会遇到这样的问题。因此,请认真考虑同时使用商店的方式。