【问题标题】:Using AsyncTask to Send Android Email使用 AsyncTask 发送 Android 电子邮件
【发布时间】:2013-01-17 08:06:33
【问题描述】:

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

Sending Email in Android using JavaMail API without using the default/built-in app

根据之前的问题,我曾就网络错误问过这个问题:

Need Help Debugging Email Code

我的问题是,我将如何实现 AsyncTask 以成功发送包含此 Android 代码的电子邮件?我看到的每个教程都告诉我应该这样做

extend AsyncTask {

但是,GMailSender.java 已经将其定义为:

public class GMailSender extends javax.mail.Authenticator

有人可以帮助我吗?谢谢!

注意:

请不要像那个白痴一样 -1ed 这个问题并发布了 Sending Email in Android using JavaMail API without using the default/built-in app 中给出的确切答案。由于无法再在 Android 应用程序的主线程上运行网络操作,我无法使用该精确编码。我正在寻找一种使用 AsyncTask 以便在后台运行操作的方法。我不知道该怎么做

extend AsyncTask {

不碰

public class GMailSender extends javax.mail.Authenticator

【问题讨论】:

    标签: android debugging email asynchronous task


    【解决方案1】:

    AsyncTask doc page 上有一个很好的例子。

    将您的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) 给我一个错误This method must return a result of type Void
    • 另外,我不能做return null;,因为那样只会给我另一个null 日志。
    • 其实我收回了。我稍微编辑了代码,现在让它工作了。非常感谢!干杯!
    • 让我知道哪些部分不起作用 - 我很乐意为后代编辑答案。作为旁注,来自doInBackground 的返回值正是传递给onPostExecute 的值。仅当您覆盖该方法时才使用它。
    【解决方案2】:
    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”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 2017-01-03
      • 2016-12-20
      • 2017-10-17
      • 2016-04-17
      • 2017-12-07
      相关资源
      最近更新 更多