2012-01-09 34 views
0

我正在创建一个应用程序,点击按钮用户可以发送电子邮件。 但我希望发送电子邮件的任务应该在后台完成。 有人建议我使用AsyncTask,但我完全不知道这一点。 有人可以告诉我该怎么做吗? 我有sendEmail函数,它需要两个字符串参数(用户名,密码),我不知道如何将这两个字符串参数传递给AsyncTask和doInBackground方法。 我的sendEmail功能是Android中的AsyncTask参数

public void sendEmail(String ownerEmailid, String datapwd) 
{ 
    try { 

     GMailSender sender = new GMailSender(ownerEmailid, datapwd); 
     sender.sendMail("This is Subject", 
         "Hey buddy listen to this station it is awesome", 
         ownerEmailid, 
         email); 
    } catch(Exception e) { 
     Log.e("SendMail", e.getMessage(), e); 
    } 
} 

请建议解决方案。

回答

2

中的onClick调用

new SendEmail(0).execute(); 

/** Inner class for implementing progress bar before fetching data **/ 
    private class SendEmail extends AsyncTask<Void, Void, Integer> 
    { 
//if you want to show progress you can show here 

    // private ProgressDialog Dialog = new ProgressDialog(yourActivityClass.this); 
    @Override 
    protected void onPreExecute() 
    { 
//   Dialog.setMessage("Doing something..."); 
    //  Dialog.show(); 
    } 

    @Override 
    protected Integer doInBackground(Void... params) 
    { 
     //Task for sending mail 

try { 

     GMailSender sender = new GMailSender(ownerEmailid, datapwd); 
     sender.sendMail("This is Subject", 
         "Hey buddy listen to this station it is awesome", 
         ownerEmailid, 
         email); 
    } catch(Exception e) { 
     Log.e("SendMail", e.getMessage(), e); 
    } 
     return 0; 
    } 

    @Override 
    protected void onPostExecute(Integer result) 
     { 

     if(result==0) 
     { 
//do some thing 
     } 

// after completed finished the progressbar 
//  Dialog.dismiss(); 
    } 
+0

我只需要改变一个小东西,它的工作...而不是新的SendEmail(0).execute(); 我写了新的SendEmail()。execute();它的工作 – shankey 2012-01-11 18:29:07

0
private class YourTask extends AsyncTask<String, Void, Void> { 

     @Override 
     protected Void doInBackground(String... params) { 
      String email = params[0]; 
        String name = params[1]; 


         // do whatever with your strings.. 
     } 

     @Override 
     protected void onPostExecute() { 

     } 

    } 

new YourTask().execute("[email protected]", "Test User name"); 
的AsyncTask的

第一个参数是你的输入paramater的类型(你需要的是字符串),正在执行过程中如果使用第二个参数,例如,你可以更新你的进步指标,最后第三个参数是你的返回参数。如果您想根据输出显示警报或其他内容,则可以通过此参数将参数传递给onPostExecute方法。

如果您想显示进度对话框,您应该覆盖onPreExecute函数。

希望这会有所帮助。

+0

如果这个答案对你有用,你应该投票... – barisatbas 2012-01-09 13:36:04