使用AsyncTask发送Android电子邮件

6

最近我提出了一个关于以下代码的问题:

在Android中使用JavaMail API发送电子邮件而不使用默认/内置应用程序

我之前曾经问过这个问题,是关于网络错误的,这是之前的一个问题:

需要帮助调试邮件代码

我的问题是,如何实现AsyncTask以成功地使用此Android代码发送电子邮件?每个教程都告诉我应该做什么:

extend AsyncTask {

然而,GMailSender.java已经定义了以下内容:

public class GMailSender extends javax.mail.Authenticator

有谁能帮忙吗?谢谢!

注意:

请不要像那个白痴一样,将此问题评为-1并发布与在Android中使用JavaMail API发送电子邮件而不使用默认/内置应用程序相同的答案。由于无法在Android应用程序的主线程上运行网络操作,因此我无法使用完全相同的编码。我正在寻找一种使用AsyncTask以便在后台运行该操作的方法。我无法弄清楚如何做到这一点。

extend AsyncTask {

无需触摸

public class GMailSender extends javax.mail.Authenticator
2个回答

8

AsyncTask文档页面上有一个非常好的例子。

将您的GMailSender对象传递给AsyncTask,并在doInBackground期间调用GMailSender#sendMail

也就是说,

public void onClick(View v) {
    final GMailSender sender = new GMailSender("username@gmail.com", "password");
    new AsyncTask<Void, Void, Void>() {
        @Override public Void doInBackground(Void... arg) {
            try {   
                sender.sendMail("This is Subject",   
                    "This is Body",   
                    "user@gmail.com",   
                    "user@yahoo.com");   
            } catch (Exception e) {   
                Log.e("SendMail", e.getMessage(), e);   
            } 
        }
    }.execute();

}

doInBackground(Void... arg) 给我一个错误:该方法必须返回类型为 Void 的结果 - The Obscure Question
另外,我不能使用“return null;”,因为这只会给我另一个“null”日志。 - The Obscure Question
实际上,我撤回之前的话。我稍微编辑了一下代码,现在它可以工作了。非常感谢!干杯! - The Obscure Question
让我知道哪些部分不起作用 - 我很乐意为后人编辑答案。顺便说一下,doInBackground 的返回值只是传递给 onPostExecute 的内容。只有在你重写该方法时才会使用它。 - dokkaebi

1
public void onClick(View v) {
final GMailSender sender = new GMailSender("username@gmail.com",       "password");
new AsyncTask<Void, Void, Void>() {
    @Override public Void doInBackground(Void... arg) {
        try {   
            sender.sendMail("This is Subject",   
                "This is Body",   
                "user@gmail.com",   
                "user@yahoo.com");   
        } catch (Exception e) {   
            Log.e("SendMail", e.getMessage(), e);   
        } 
    return null;}
}.execute();

}

谢谢 "dokkaebi"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接