有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java 安卓应用程序:Gmail导致应用程序在登录后崩溃

我正在开发一个应用程序,可以登录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

以下是与此问题相关的日志:

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 安卓.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 安卓.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 安卓.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。GetMail方法如下所示:

 //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;
    }

}

共 (0) 个答案