【发布时间】:2015-06-01 22:24:13
【问题描述】:
我在 javamail store isConnected() 函数中遇到了一个非常奇怪的错误。我在我的 android 应用程序中使用它来存储连接断开时的重新连接。
if (!store.isConnected()) store.connect(host, username, password);
但是,当连接断开时,该函数第一次调用返回true,第二次调用返回false。也就是说上面的代码在store没有连接的情况下不会触发store.connect,但是这段代码:
if (!store.isConnected()) store.connect(host, username, password);
else if (!store.isConnected()) store.connect(host, username, password);
将重新连接商店,因为第二次调用 isConnected() 函数返回 false。
我不知道我解释的错误是否足够好。 我想知道这是否是已知行为。也许,我做错了什么。或者,如果商店断开连接,也许有更好的方法来重新连接商店。
提前谢谢你!
编辑:
这段代码:
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 调试中输出:
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 未连接且第二次 isConnected() 根本未执行,也会返回 true!?但是它执行connect()函数!?
我真的很困惑。还有一点害怕...... :)
【问题讨论】:
-
store.isConnected 向服务器发送 NOP 命令。如果成功,则返回 true。当然,服务器可以选择在那之后立即断开连接,但这似乎不太可能。发生这种情况时,debug output 会显示什么?
-
如何在android应用程序的eclipse中调试?
-
@milosh 点击 Bill 提供的链接。
-
@Bill Shannon 我已经用调试信息编辑了我的答案
-
您使用的是什么版本的 JavaMail?在调试输出中,它应该在开头包含版本号。
标签: java android jakarta-mail