Facebook、Twitter、Hotmail、および Gmail アカウントにログインし、フィード/メッセージを表示するための複合受信トレイを持っているアプリを構築しています。2013 年 1 月 24 日まではすべて正常に動作していましたが、Gmail アカウントにログインするとアプリがクラッシュしました。ログインの詳細が間違っている場合、アプリはクラッシュしません。ログインの詳細が正しい場合、アプリはトーストに「ログイン成功」を表示し、結合された受信トレイに移動するとクラッシュします。3 日前 'Gmail に再度ログインできなかったよりも、問題なく (コードに変更を加えていませんでした) 再度実行しました。Gmail ログイン用の私のコードは次のとおりです。
// Gmail ログインを実行
public class GmailLogin extends AsyncTask<String, Integer, Boolean> {
String username;
String password;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), R.string.Executing_Gmail_login,
//Toast.makeText(getApplicationContext(), "Executing Gmail login..",
Toast.LENGTH_LONG).show();
super.onPreExecute();
}
@Override
protected Boolean doInBackground(final String... params) {
username = params[0];
password = params[1];
return Gmail.doGmailLogin(params[0], params[1]);
}
@Override
protected void onPostExecute(Boolean result) {
// TODO Auto-generated method stub
if (result) {
SharedPreferences gmailPreference = getSharedPreferences(
Const.GMAIL_PREF_NAME, 0);
Utility.saveGmailPrefrences(gmailPreference, username, password);
Toast.makeText(getApplicationContext(), R.string.Gmail_Login_success,
//Toast.makeText(getApplicationContext(), "Gmail Login succesful",
Toast.LENGTH_LONG).show();
gotoInbox();
} else {
Toast.makeText(getApplicationContext(),
R.string.Invalid_login_try_again, Toast.LENGTH_LONG)
//"Invalid login. Please try again", Toast.LENGTH_LONG)
.show();
}
super.onPostExecute(result);
}
}//end of GmailLogin class
この問題に関連する logcat は次のとおりです。
02-09 11:17:28.187: I/Choreographer(759): Skipped 39 frames! The application may be doing too much work on its main thread.
02-09 11:17:28.436: E/AndroidRuntime(759): FATAL EXCEPTION: AsyncTask #1
02-09 11:17:28.436: E/AndroidRuntime(759): java.lang.RuntimeException: An error occured while executing doInBackground()
02-09 11:17:28.436: E/AndroidRuntime(759): at android.os.AsyncTask$3.done(AsyncTask.java:299)
02-09 11:17:28.436: E/AndroidRuntime(759): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
02-09 11:17:28.436: E/AndroidRuntime(759): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
02-09 11:17:28.436: E/AndroidRuntime(759): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
02-09 11:17:28.436: E/AndroidRuntime(759): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-09 11:17:28.436: E/AndroidRuntime(759): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
02-09 11:17:28.436: E/AndroidRuntime(759): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-09 11:17:28.436: E/AndroidRuntime(759): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-09 11:17:28.436: E/AndroidRuntime(759): at java.lang.Thread.run(Thread.java:856)
02-09 11:17:28.436: E/AndroidRuntime(759): Caused by: java.lang.IndexOutOfBoundsException
02-09 11:17:28.436: E/AndroidRuntime(759): at com.sun.mail.imap.IMAPFolder.checkRange(IMAPFolder.java:429)
02-09 11:17:28.436: E/AndroidRuntime(759): at com.sun.mail.imap.IMAPFolder.getMessage(IMAPFolder.java:1365)
02-09 11:17:28.436: E/AndroidRuntime(759): at javax.mail.Folder.getMessages(Folder.java:879)
02-09 11:17:28.436: E/AndroidRuntime(759): at com.fyp.Gmail.getMails(Gmail.java:161)
02-09 11:17:28.436: E/AndroidRuntime(759): at com.fyp.InboxActivity$RecieveGmail.doInBackground(InboxActivity.java:510)
02-09 11:17:28.436: E/AndroidRuntime(759): at com.fyp.InboxActivity$RecieveGmail.doInBackground(InboxActivity.java:1)
02-09 11:17:28.436: E/AndroidRuntime(759): at android.os.AsyncTask$2.call(AsyncTask.java:287)
02-09 11:17:28.436: E/AndroidRuntime(759): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-09 11:17:28.436: E/AndroidRuntime(759): ... 5 more
02-09 11:17:28.956: I/Choreographer(759): Skipped 56 frames! The application may be doing too much work on its main thread.
02-09 11:17:29.446: I/Choreographer(759): Skipped 125 frames! The application may be doing too much work on its main thread.
02-09 11:17:29.606: I/Choreographer(759): Skipped 34 frames! The application may be doing too much work on its main thread.
2か月近く機能し、コードに変更をインポートせずに機能しなくなった理由がわかりません
誰かがこの問題について何か考えを持っているなら、私は本当に感謝します
Gmail.getMails メソッドは次のとおりです。
//Get mails from gmail.
public static Message[] getMails(final String username, final String password) {
Properties props = System.getProperties();
// props.setProperty("mail.store.protocol", "imaps");
// props.put("mail.smtp.starttls.enable", "true");
props.put("mail.imap.host", "imap.gmail.com");
props.put("mail.imap.user", username);
// User SSL
props.put("mail.imap.socketFactory", 993);
props.put("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.imap.port", 993);
Authenticator auth = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
};
Session sessioned = Session.getDefaultInstance(props, auth);
Store store;
try {
store = sessioned.getStore("imaps");
store.connect("smtp.gmail.com", username, password);
Folder inbox = store.getFolder("inbox");
inbox.open(Folder.READ_WRITE);
// FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
// Message[] unReadMessages = inbox.search(ft);
int total=inbox.getMessageCount();
Message[] unReadMessages = reverseMsgs(inbox.getMessages(total-15,total));
//= inbox.getMessages(total,total-15);
return unReadMessages;
} catch (NoSuchProviderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}