0
我正在阅读使用JavaMail API的电子邮件并将每个消息(以及发件人,发送日期等)添加到LinkedHashMap中。接下来,我将LinkedHashMap添加到LinkedHashMaps的ArrayList。然而,奇怪的是整个Hashmapis被最后一个条目覆盖。无法将元素添加到Java中的LinkedHashMap
我有以下代码:
private ArrayList<LinkedHashMap<String, String>> readAllMsgsFromOutlook() throws FileNotFoundException, IOException, MessagingException
{
LinkedHashMap<String, String> msgsLinkedHashMap = new LinkedHashMap<String, String>();
ArrayList<LinkedHashMap<String, String>> msgsLinkedHashMapAsArrayList = new ArrayList<LinkedHashMap<String, String>>();
//String host = "smtp-mail.outlook.com";
String emailID = ..getEmail();
String password = ..getPassword();
Properties props = new Properties();
props.setProperty("mail.store.protocol", "imaps");
try {
Session session = Session.getInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap-mail.outlook.com", emailID, password);
Folder inboxFolder = store.getFolder("INBOX");
UIDFolder UID = (UIDFolder)inboxFolder;
Message[] msgs = null;
Flags seen = new Flags(Flags.Flag.SEEN);
FlagTerm unseenFlagTerm = new FlagTerm(seen, false);
msgs = inboxFolder.search(unseenFlagTerm);
System.out.println("Number of New Emails in Inbox: " + msgs.length + "\n");
String senderAsString = "";
String sentDateAsString = "";
String subjectAsString = "";
String contentAsString = "";
String UIDAsString = "";
for (int msgCounter = 0; msgCounter < msgs.length; msgCounter++)
{
System.out.println("Email #: " + (msgCounter + 1) + "\n");
Message msg = msgs[msgCounter];
long UIDAsLong = UID.getUID(msg);
Object content = msg.getContent();
if (content instanceof String)
{
System.out.println("Email is instance of String: \n");
Address[] sender = msg.getFrom();
senderAsString = sender[0].toString();
System.out.println("SENDER: " + senderAsString);
sentDateAsString = msg.getSentDate().toString();
System.out.println("SENT_DATE: " + sentDateAsString);
subjectAsString = msg.getSubject().toString();
System.out.println("SUBJECT: " + subjectAsString);
contentAsString = (String)content;
System.out.println("CONTENT: " + contentAsString);
UIDAsString = String.valueOf(UIDAsLong);
System.out.println("UID: " + UIDAsString);
System.out.println("\n");
}
else if (content instanceof Multipart)
{
System.out.println("Email is instance of Multipart");
Multipart mp = (Multipart)content;
BodyPart bp = mp.getBodyPart(0);
Address[] sender = msg.getFrom();
sentDateAsString = msg.getSentDate().toString();
subjectAsString = msg.getSubject();
contentAsString = bp.getContent().toString();
senderAsString = sender[0].toString();
System.out.println("SENDER: " + senderAsString);
System.out.println("SENT DATE: " + sentDateAsString);
System.out.println("SUBJECT: " + subjectAsString);
System.out.println("CONTENT: " + contentAsString);
UIDAsString = String.valueOf(UIDAsLong);
System.out.println("UID: " + UIDAsString);
System.out.println("\n");
}
msgsLinkedHashMap.put("sender", senderAsString);
msgsLinkedHashMap.put("sentDate", sentDateAsString);
msgsLinkedHashMap.put("subject", subjectAsString);
msgsLinkedHashMap.put("content", contentAsString);
msgsLinkedHashMap.put("UID", UIDAsString);
msgsLinkedHashMapAsArrayList.add(msgsLinkedHashMap);
}
} catch (Exception mex) {
// TODO Auto-generated catch block
mex.printStackTrace();
}
此时被添加的内容似乎是正确的。例如,如果我有24条消息,内容是“msg1”,“msg2”,“msg3”等,则系统会打印出正确的内容。
但是,当我在下面的右括号之后遍历HashMap时,我所得到的只是第24个元素。换句话说,系统将始终打印“msg24”即使在列表中的第23个要素下面的代码:
for (int arrayListCounter = 0; arrayListCounter < msgsLinkedHashMapAsArrayList.size(); arrayListCounter++) {
LinkedHashMap<String, String> singleHashmapInArrayList = msgsLinkedHashMapAsArrayList.get(arrayListCounter);
String content = singleHashmapInArrayList.get("content");
System.out.println(">>> " + arrayListCounter + " : " + content);
//出于某种原因,内容始终等于msg24而不是MSG1,MSG2,消息3等等。这似乎是第24个元素将取代所有以前的元素。但为什么? }
return msgsLinkedHashMapAsArrayList;
}
我一直在试图找出问题的几个小时。
我在做什么错?