我想发送我的应用程序的背景并发送电子邮件。 我按照这个例子实现了它 http://javapapers.com/android/android-email-app-with-gmail-smtp-using-javamail/
public class SendMailTask extends AsyncTask {
private ProgressDialog statusDialog;
private Activity sendMailActivity;
public SendMailTask(Activity activity) {
sendMailActivity = activity;
}
protected void onPreExecute() {
statusDialog = new ProgressDialog(sendMailActivity);
statusDialog.setMessage("Getting ready...");
statusDialog.setIndeterminate(false);
statusDialog.setCancelable(false);
statusDialog.show();
}
@Override
protected Object doInBackground(Object... args) {
try {
Log.i("SendMailTask", "About to instantiate GMail...");
publishProgress("Processing input....");
GMail androidEmail = new GMail(args[0].toString(),
args[1].toString(), (List) args[2], args[3].toString(),
args[4].toString());
publishProgress("Preparing mail message....");
androidEmail.createEmailMessage();
publishProgress("Sending email....");
androidEmail.sendEmail();
publishProgress("Email Sent.");
Log.i("SendMailTask", "Mail Sent.");
} catch (Exception e) {
publishProgress(e.getMessage());
Log.e("SendMailTask", e.getMessage(), e);
}
return null;
}
@Override
public void onProgressUpdate(Object... values) {
statusDialog.setMessage(values[0].toString());
}
@Override
public void onPostExecute(Object result) {
statusDialog.dismiss();
}
}
代码工作正常 但是,我有一个演示文稿,我需要解释代码。 在代码中,SendMailTask扩展了AsyncTask,没有任何额外的参数,甚至没有Void
我坚持这一点,因为我搜索过,没有人用这种方式。 任何人都可以向我解释一下吗?
答案 0 :(得分:0)
如果你没有指定任何Generic参数,你会看到它将java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0][match valid=false]
[need input=false][source closed=false][skipped=false][group separator=\,]
[decimal separator=\.][positive prefix=][negative prefix=\Q-\E][positive suffix=]
[negative suffix=][NaN string=\Q?\E][infinity string=\Q?\E]
/*Pseudocode:
Text: Input Text to Encrypt
"User Input"
Text: "User input output for test pourposes"
*/
Scanner enc = new Scanner(System.in);
System.out.println("Input Text to encrypt");
System.out.println(enc);
}
}
作为一种类型(所有类的基类)
因此,仅使用Object
您实际上正在处理AsyncTask
例如 - 请参阅给定链接中的Object
参数
答案 1 :(得分:0)
没有参数,AsyncTask将采用默认类(即Object)
public class SendMailTask extends AsyncTask <Object1, Object2, Object3> {
@Override
protected Object doInBackground(Object1... args) {
...
//publishProgress calls "onPublishProgress" method
//e.g. publishProgress("email sent.");
publishProgress(object2);
//last line returns to "onPostExecute" method
//e.g. return null;
return object3;
}
@Override
public void onProgressUpdate(Object2... values) {
...
}
@Override
public void onPostExecute(Object3 result) {
...
}
}
Object1是初始化asyncTask时传入的参数数组
new SendMailTask(SendMailActivity.this).execute(fromEmail,
fromPassword, toEmailList, emailSubject, emailBody);
所以fromEmail,fromPassword等等都进入了Object1的数组。 您可以使用arg [index]在doInBackground方法中访问它们。
答案 2 :(得分:0)
老实说,他们扩展AsyncTask的方式并不是非常聪明。它会在Android Studio中引发一些令人讨厌的警告,并且扩展AsyncTask<Object, Object, Object>
同样容易,但效果相同,但它会删除警告。
所有这些都表示,为了使用该课程,您只需拨打以下电话:
Object[] args = new Object[]{
arg1,
arg2,
etc
};
new SendMailTask(activity).execute(args);
您只需要检查GMail
构造函数,看看您应该如何订购args。