2013-01-17 3 views
6

ich eine Frage in Bezug auf den folgenden Code vor kurzem gefragt hatte:AsyncTask Mit Android E-Mail sendet

Sending Email in Android using JavaMail API without using the default/built-in app

ich dies in Bezug auf einen Netzwerkfehler gebeten hatte, nach einer früheren Frage:

Need Help Debugging Email Code

Meine Frage ist, wie würde ich eine AsyncTask implementieren, um eine E-Mail mit diesem Android-Code erfolgreich zu senden? Jedes Tutorial, das ich mir informiert, dass ich

extend AsyncTask { 

tun sollte jedoch GMailSender.java bereits hat dies wie folgt definiert:

public class GMailSender extends javax.mail.Authenticator 

wäre in der Lage mir jemand zu helfen? Vielen Dank!

HINWEIS:

Bitte seien Sie nicht wie der Idiot, hatte -1 ed diese Frage und veröffentlicht die genaue Antwort, wie in Sending Email in Android using JavaMail API without using the default/built-in app gegeben wurde. Ich kann diese genaue Codierung nicht verwenden, da es nicht mehr möglich ist, eine Netzwerkoperation auf dem Haupt-Thread einer Android-Anwendung auszuführen. Ich suche nach einer Möglichkeit, AsyncTask zu verwenden, um den Vorgang im Hintergrund auszuführen. Was ich bin nicht in der Lage, um herauszufinden, ist, wie

extend AsyncTask { 

zu tun, ohne

public class GMailSender extends javax.mail.Authenticator 

Antwort

8

zu berühren Es gibt ein ziemlich gutes Beispiel ist direkt am AsyncTask doc page.

Übergeben Sie Ihr GMailSender Objekt in eine AsyncTask und rufen Sie GMailSender#sendMail während doInBackground.

Das heißt,

public void onClick(View v) { 
    final GMailSender sender = new GMailSender("[email protected]", "password"); 
    new AsyncTask<Void, Void, Void>() { 
     @Override public Void doInBackground(Void... arg) { 
      try { 
       sender.sendMail("This is Subject", 
        "This is Body", 
        "[email protected]", 
        "[email protected]"); 
      } catch (Exception e) { 
       Log.e("SendMail", e.getMessage(), e); 
      } 
     } 
    }.execute(); 

} 
+0

'doInBackground (Void ... arg)' gibt mir einen Fehler von 'Diese Methode muss ein Ergebnis vom Typ Void Rück ' –

+0

Außerdem kann ich nicht' null zurückgeben; ', weil das mir nur ein anderes' null' Protokoll geben würde. –

+0

Eigentlich nehme ich es zurück. Ich habe den Code leicht bearbeitet und jetzt funktioniert es. Danke vielmals! Prost! –

1
public void onClick(View v) { 
final GMailSender sender = new GMailSender("[email protected]",  "password"); 
new AsyncTask<Void, Void, Void>() { 
    @Override public Void doInBackground(Void... arg) { 
     try { 
      sender.sendMail("This is Subject", 
       "This is Body", 
       "[email protected]", 
       "[email protected]"); 
     } catch (Exception e) { 
      Log.e("SendMail", e.getMessage(), e); 
     } 
    return null;} 
}.execute(); 

} 

Danke "Dokkaebi"