2017-01-04 4 views
0

Ich möchte senden und per E-Mail auf dem Hintergrund meiner App. Ich folgte diesem Beispiel und setzte es http://javapapers.com/android/android-email-app-with-gmail-smtp-using-javamail/AsyncTask ohne Parameter

public class SendMailTask extends AsyncTask { 

    private ProgressDialog statusDialog; 
    private Activity sendMailActivity; 

    public SendMailTask(Activity activity) { 
     sendMailActivity = activity; 

    } 

    protected void onPreExecute() { 
     statusDialog = new ProgressDialog(sendMailActivity); 
     statusDialog.setMessage("Getting ready..."); 
     statusDialog.setIndeterminate(false); 
     statusDialog.setCancelable(false); 
     statusDialog.show(); 
    } 

    @Override 
    protected Object doInBackground(Object... args) { 
     try { 
      Log.i("SendMailTask", "About to instantiate GMail..."); 
      publishProgress("Processing input...."); 
      GMail androidEmail = new GMail(args[0].toString(), 
        args[1].toString(), (List) args[2], args[3].toString(), 
        args[4].toString()); 
      publishProgress("Preparing mail message...."); 
      androidEmail.createEmailMessage(); 
      publishProgress("Sending email...."); 
      androidEmail.sendEmail(); 
      publishProgress("Email Sent."); 
      Log.i("SendMailTask", "Mail Sent."); 
     } catch (Exception e) { 
      publishProgress(e.getMessage()); 
      Log.e("SendMailTask", e.getMessage(), e); 
     } 
     return null; 
    } 

    @Override 
    public void onProgressUpdate(Object... values) { 
     statusDialog.setMessage(values[0].toString()); 

    } 

    @Override 
    public void onPostExecute(Object result) { 
     statusDialog.dismiss(); 
    } 

} 

Der Code funktioniert gut
Allerdings habe ich eine Präsentation und ich brauche, um den Code zu erklären. In den Code, SendMailTask ​​erweitert AsyncTask ohne zusätzliche Parameter nicht einmal Void

Ich stecke in diesem Punkt, weil ich gesucht habe und niemand auf diese Weise verwendet. Kann mir das jemand erklären?

+0

Was meinen Sie mit "sendMailTask ​​erweitert AsyncTask ohne zusätzliche Parameter nicht einmal ungültig"? – Nakul

+0

Er bedeutet "erweitert AsyncTask" statt "erweitert AsyncTask ' –

+0

zeigen Sie uns den Code, den Sie beschreiben – Blundell

Antwort

0

ohne die Parameter, wird AsyncTask die Standardklasse übernehmen (das Objekt ist)

public class SendMailTask extends AsyncTask <Object1, Object2, Object3> { 

    @Override 
    protected Object doInBackground(Object1... args) { 
    ...  

     //publishProgress calls "onPublishProgress" method 
     //e.g. publishProgress("email sent."); 
     publishProgress(object2); 

     //last line returns to "onPostExecute" method 
     //e.g. return null; 
     return object3; 
    } 

    @Override 
    public void onProgressUpdate(Object2... values) { 
    ... 

    } 

    @Override 
    public void onPostExecute(Object3 result) { 
    ... 
    } 
} 

Object1 ist die Anordnung der Parameter in Ihnen passieren, wenn die AsyncTask Initialisierung

  new SendMailTask(SendMailActivity.this).execute(fromEmail, 
        fromPassword, toEmailList, emailSubject, emailBody); 

so FROMEMAIL, fromPassword, etc, etc alle in das Array von Object1 geht. Sie greifen auf sie in doInBackground-Methode mit Arg [Index].

0

Wenn Sie keine generische Parameter angeben, Sie werden sehen, es Object als Typ (Basisklasse für alle Klassen) nehmen

So im Falle von

nur AsyncTask verwenden Sie es zu tun haben tatsächlich mit Object

EG- Siehe Parameter von doInBackground() in dem angegebenen Link

+0

Dies ist eine sehr minimalistische Antwort. Versuchen Sie, genauer zu erklären, wenn Sie können –

+0

Wie Sie erklären können "Liste a;" Es wird behandelt als "Liste a;' – Gaurav

0

Ehrlich gesagt, die Art, wie sie AsyncTask erweitert haben, ist nicht besonders intelligent. Es verursacht eine Reihe von lästigen Warnungen in Android Studio, und es wäre genauso einfach zu erweitern AsyncTask<Object, Object, Object>, es ist der gleiche Effekt, aber es entfernt die Warnungen.

von Alles, was gesagt wird, um die Klasse zu verwenden, können Sie einfach den folgenden Aufruf:

Object[] args = new Object[]{ 
    arg1, 
    arg2, 
    etc 
}; 
new SendMailTask(activity).execute(args); 

Sie müssen nur die GMail Konstruktor überprüfen, um zu sehen, wie Sie Ihre args bestellen sollte.