我正在尝试使用async方法发送电子邮件,如下所示,一切正常......
现在我想在成功的电子邮件上显示一个对话框。
这是我的异步代码:
public void sending(View v) {
try {
LongOperation l=new LongOperation();
l.execute();
Toast.makeText(this, l.get(), Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Log.e("SendMail", e.getMessage(), e);
}
}
public class LongOperation extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
try{GMailSender sender = new GMailSender("XXX@gmail.com","Pwd");
sender.sendMail("Sub",
"body",
"sender",
"recepient");
}
catch(Exception e){Log.e("error",e.getMessage(),e);return "Email Not Sent";}
return "Email Sent";
}
@Override
protected void onPostExecute(String result)
{
}
@Override
protected void onPreExecute()
{
}
@Override
protected void onProgressUpdate(Void... values)
{
}
在上面的代码中,如果没有发送邮件,我正在举报“发送电子邮件”,如果没有发送电子邮件,我会收到“未发送电子邮件”
1)在吐司的地方,我想显示一个对话框。
2)我已经在 onPostExecute
中完成了它并且运行正常。
但是问题就出现了。假如没有互联网连接并且用户点击按钮“电子邮件未发送”并且对话框在onPostExecute方法之后显示。
我只想显示对话框。
那么如何修改上面的代码以删除祝酒词,只获取成功和不成功的电子邮件对话框。
这是我的对话框代码:
new AlertDialog.Builder(MainActivity.this)
.setTitle("Info")
.setMessage("Sample message.")
.setPositiveButton("OK",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
Log.d("AlertDialog","Positive");
}}).show();
答案 0 :(得分:1)
仍然不能完全确定我理解这个问题,但也许这就是你想要的。
public void sending(View v) {
try {
LongOperation l=new LongOperation();
l.execute();
} catch (Exception e) {
Log.e("SendMail", e.getMessage(), e);
}
}
public class LongOperation extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
try{GMailSender sender = new GMailSender("XXX@gmail.com","Pwd");
sender.sendMail("Sub",
"body",
"sender",
"recepient");
}
catch(Exception e){Log.e("error",e.getMessage(),e);return "Email Not Sent";}
return "Email Sent";
}
@Override
protected void onPostExecute(String result)
{
if ("Email Sent".equals(result))
{
new AlertDialog.Builder(MainActivity.this)
.setTitle("Info")
.setMessage("Sample message.")
.setPositiveButton("OK",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
Log.d("AlertDialog","Positive");
}}).show();
}
@Override
protected void onPreExecute()
{
}
@Override
protected void onProgressUpdate(Void... values)
{
}
我只是删除了Toast
,因为你根本不需要它。然后我将Dialog
代码放在onPostExecute()
中,并检查了从result
传递给它的doInBackground()
代码。我只在result
为"Email Sent"
时展示了它。您可以将其更改为从result
传回不同的doInBackground()
(如果未发送),并在Dialog
中显示不同的消息。
修改强>
我几乎忘了提,你几乎不想在.get()
上使用AsyncTask
。这是一个阻塞调用,这意味着一切都会停止,直到你的任务完成。您更新UI
以外的任何任务方法中的doInBackground()
,或者使用interface
进行回调。