2016-07-11 8 views
0

Ich arbeite an einer App mit E-Mail senden Funktion arbeiten. Die Adressliste der E-Mail-Empfänger stammt aus einer SQLite-Abfrage aus einer Datenbank. Anscheinend muss ich Datenbankabfrage im Hintergrund laufen lassen, um die E-Mail-Funktion arbeiten zu lassen (siehe meinen Code unten). Ich weiß jedoch nicht, wie ich die Ausgabe meiner Abfrage, die eine E-Mail-Liste enthält, abrufen kann, und lade auf ein 'TO' Empfängerfeld. Das E-Mail-Feld "TO" sollte eine String-Array-Liste sein. Der aktuelle Code funktioniert nicht. Könnte mir jemand dabei helfen? Vielleicht gibt es andere Möglichkeiten, mein Problem zu lösen. Ich bin sehr neu in Android und Java. Danke vielmals!Ist es möglich, sqlite Abfrage im Hintergrund Thread und Senden einer E-Mail auf der Benutzeroberfläche mit der Ausgabe der Abfrage als TO-Feld

meine Tätigkeit Codes sind hier:

package jhapps.com.demographics; 

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

import java.io.Serializable; 

public class PromotionEmailMonthTop10 extends Activity { 
private EditText subjectGroupTop10,bodyGroupTop10; 
private Button btnMonthTop10; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_promotion_email_month_top10); 


    subjectGroupTop10=(EditText)findViewById(R.id.subjectMonthTop10); 
    bodyGroupTop10=(EditText)findViewById(R.id.bodyMonthTop10); 
    btnMonthTop10=(Button)findViewById(R.id.btnMonthTop10); 
    btnMonthTop10.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      EmailMonthTop10(); 

      // after sending the email, clear the fields 
      subjectGroupTop10.setText(""); 
      bodyGroupTop10.setText(""); 
     } 


    }); 


} 

//get month top 10 email list 
protected void EmailMonthTop10() { 

    /** DataBaseHelper dataBaseHelper=new DataBaseHelper(this); 
    String[] emailGroupTop10=new String[dataBaseHelper.eMailListMonthTop10().size()]; 
    for(int i=0;i<dataBaseHelper.eMailListMonthTop10().size();i++){ 
     emailGroupTop10[i]=dataBaseHelper.eMailListMonthTop10().get(i); 
    } 
*/ 
    new SendEmailTop10Task().execute(); 

    String subjects=subjectGroupTop10.getText().toString(); 
    String bodytext=bodyGroupTop10.getText().toString(); 

    //start email intent 

      Intent email = new Intent(Intent.ACTION_SENDTO); 

      // prompts email clients only 
    email.setType("message/rfc822"); 
    email.setData(Uri.parse("mailto:")); 


    email.putExtra(Intent.EXTRA_EMAIL, new SendEmailTop10Task().execute()); 
    // email.putExtra(Intent.EXTRA_EMAIL,new String []{"[email protected]","[email protected]"}); 

      email.putExtra(Intent.EXTRA_SUBJECT, subjects); 

      email.putExtra(Intent.EXTRA_TEXT, bodytext); 
      try { 
       // the user can choose the email client 

       startActivity(Intent.createChooser(email, "Choose an email client from...")); 
      } catch (android.content.ActivityNotFoundException ex) { 

       Toast.makeText(PromotionEmailMonthTop10.this, "No email client installed.", 
         Toast.LENGTH_LONG).show(); 
      } 



     } 

class SendEmailTop10Task extends AsyncTask<Void, Void, Void> { 

    // This is called on a seperate thread 
    @Override 
    protected Void doInBackground(Void... Voids) { 
     DataBaseHelper dataBaseHelper=new DataBaseHelper(PromotionEmailMonthTop10.this); 
     String[] emailGroupTop10=new String[dataBaseHelper.eMailListMonthTop10().size()]; 
     for(int i=0;i<dataBaseHelper.eMailListMonthTop10().size();i++){ 
      emailGroupTop10[i]=dataBaseHelper.eMailListMonthTop10().get(i); 
     } 
    return null; 
    } 

} 

}

+0

Sie möchten eine E-Mail zwischen verschiedenen Klassen Ihrer App senden? – Eenvincible

+0

Ich bin nicht sicher, wo ich anfangen soll ... Die Idee ist, dass Sie Ihre Abfrage auf Ihrem onClick starten sollten, mit einem Rückruf für, wenn Sie Ihre Datenbank-Antwort bekommen. Dieser Rückruf startet die E-Mail-Absicht. – MPelletier

+0

Vielen Dank für die Beantwortung meiner Frage, Eenvincible. Nein, E-Mail senden. Die E-Mail-Adressliste wird durch Abfragen von Daten aus der Datenbank generiert, die von DatabaseHelper verarbeitet werden. –

Antwort

0

das ist, was ich mit oben kommen kann:

public String getEmaillist() { 

     btnSubmit = (Button) findViewById(R.id.btneMailist); 
     btnSubmit.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       DataBaseHelper dataBaseHelper = new DataBaseHelper(PromotionEmailMonthTop10.this); 
       String[] emailGroupTop10 = new String[dataBaseHelper.eMailListMonthTop10().size()]; 
       for (int i = 0; i < dataBaseHelper.eMailListMonthTop10().size(); i++) { 
        emailGroupTop10[i] = dataBaseHelper.eMailListMonthTop10().get(i); 
       } 

      } 
     }); 

     return null; 
    } 

fügen Sie dann getEmaillist(); onCreate

den ursprünglichen Code wie folgt ändern:

String emaillist= new String(); 
    emaillist=getEmaillist(); 
    //start email intent 

    Intent email = new Intent(Intent.ACTION_SENDTO); 

      // prompts email clients only 
    email.setType("message/rfc822"); 
    email.setData(Uri.parse("mailto:")); 


    email.putExtra(Intent.EXTRA_EMAIL, emaillist); 

dies noch funktioniert. Bitte geben Sie mir weitere Informationen. Vielen vielen Dank