2012-01-09 64 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