2016-07-11 4 views
0

電子メール送信機能を備えたアプリケーションで作業しています。電子メール受信者アドレスリストは、データベースのSQLiteクエリからのものです。どうやら、私は電子メール機能を働かせるためにバックグラウンドでデータベースクエリを実行しなければなりません(下記の私のコードを見てください)。しかし、電子メールリストを含むクエリの出力を取得し、「TO」受信者フィールドにロードする方法はわかりません。 Email 'TO'フィールドは文字列配列リストでなければなりません。現在のコードは機能していません。誰かが私にこれを助けることができますか?多分私の問題を解決する他の方法があります。私はAndroidとJavaの新機能です。どうもありがとう!バックグラウンドスレッドでsqliteクエリを実行して、TOフィールドとしてクエリの出力をUIに送信することは可能ですか?

私のアクティビティコード現在地:

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

あなたのアプリの異なるクラス間で電子メールを送信したいですか? – Eenvincible

+0

どこから始めるのか分かりません...あなたのデータベースの回答を取得したときにコールバックを使用して、onClickでクエリを開始する必要があります。そのコールバックは電子メールの意図を開始します。 – MPelletier

+0

私の質問に答えてくれてありがとう、Eenvincible。いいえ、メールを送りません。電子メールアドレスリストは、databasehelperによって処理されるデータベースからのデータを照会することによって生成されます。 –

答えて

0

これは私が思い付くことができるものである。

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; 
    } 

その後、 getEmaillistを()を追加。

のonCreate

に、このような元のコード変更:

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); 

これがあるにも取り組んでいます。私に詳細な情報を提供してください。多くの多くの感謝

関連する問題