2013-11-28 49 views
0

我想发送电子邮件使用异步方法如下所示,一切工作正常。显示对话框在异步任务

这是我的异步代码:

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("[email protected]","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它工作正常。

但是问题来了。假设没有互联网连接,并且用户点击了按钮“To Not Not Send”,并在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

我很困惑。如果你不想让“吐司”出现,那你为什么不把它拿出来呢?这会导致什么问题? – codeMagic

+0

我从另一个应用程序中取得的这段代码,但是我对这个android概念很陌生。所以,你能告诉我该怎么做吗? – coder

+0

只需删除“吐司”即可。你说''Dialog'代码在你的'onPostExecute()'所以我没有看到问题 – codeMagic

回答

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("[email protected]","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()中,并检查从doInBackground()传递给它的result。如果result"Email Sent",我只显示它。如果没有发送,您可以更改该号码以从doInBackground()传回另一个result,并在Dialog中显示不同的消息。

编辑

我差点忘了提,你几乎永远都不想上AsyncTask使用.get()。这是一个阻塞呼叫,意味着一切都会停止,直到你的任务完成。除doInBackground()之外,您还可以使用任何任务方法更新UI,或者使用带回调的interface

See this answer if you need an interface

+0

@ codeMagic - 感谢您的及时回复...那做了魔术:) – coder

+0

我很高兴它的工作。看看我编辑关于使用'.get()'。 – codeMagic

相关问题