1

私はアンドロイドの初心者です。私を助けてください。複数の受信者に電子メールを送信できません。これが私のコードです。

public class SendEmailActivity extends Activity{

EditText subject_ed,message_ed;
TextView subject_tv,message_tv;
Button send_btn;

 ArrayList<String> emailList;
 ArrayList<Integer> idList;
 int eventId;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.contacts_email_sms_layout);
    setupViews();
    Intent intent = getIntent();
    Bundle b = intent.getExtras();
    eventId =  b.getInt("EventId");//event id
    idList = b.getIntegerArrayList("IdList");//list of Ids
    emailList = b.getStringArrayList("EmailList");//list of email ids
    buttonListeners();
}

public void setupViews()
{
    subject_ed = (EditText)findViewById(R.id.ed_subject_email);
    message_ed = (EditText)findViewById(R.id.ed_msg_body);
    subject_tv = (TextView)findViewById(R.id.tv_subject_email);
    message_tv = (TextView)findViewById(R.id.tv_msg_body);
    send_btn = (Button)findViewById(R.id.btn_send_sms_email);
}               

public void buttonListeners()
{
    send_btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "Email sent",Toast.LENGTH_LONG).show();
            // String to = textTo.getText().toString();
              String subject = subject_ed.getText().toString();
              String message = message_ed.getText().toString();
            Object[] to =  emailList.toArray();
//            for(int i = 0; i<=emailList.size(); i++)
////                  {
////                      
//                  String  to=   emailList.get(0);
////                     
////                  }



              Intent email = new Intent(Intent.ACTION_SEND);
              for(int i = 0; i < to.length; i++)
                {
                    Log.i("String is", (String)to[i]);
                    //String[] str = (String[])to[i];
                     email.putExtra(Intent.EXTRA_EMAIL,",'" +(String)to[i] + "'");
                }

              email.putExtra(Intent.EXTRA_SUBJECT, subject);
              email.putExtra(Intent.EXTRA_TEXT, message);

              //need this to prompts email client only
              email.setType("message/rfc822");

              startActivity(Intent.createChooser(email, "Choose an Email client :"));
             // finish();
        }
    });
}

}
4

3 に答える 3

5

まず、List から String[] への変換が間違っています。次のようにする必要があります。

List<String> list = new ArrayList<String>();
String[] arrayOfStrings = list.toArray(new String[list.size()]);

そして次のことは、次のように android.Content.Intent に言及する必要があることです..

最後に、次のように変更する必要があります

ArrayList<String> emailList;
emailList = b.getStringArrayList("EmailList");
String[] emailArray;

Intent email = new Intent(android.content.Intent.ACTION_SEND);

for(int i = 0; i < to.length; i++){
    Log.i("String is", (String)to[i]);
    email.putExtra(android.content.Intent.EXTRA_EMAIL, 
                   emailList.toArray(new String[emailList.size()]));
}
email.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
email.putExtra(android.content.Intent.EXTRA_TEXT, message);    
email.setType("message/rfc822"); //or email.setType("text/plain");

startActivity(Intent.createChooser(email, "Choose an Email client :"));
于 2013-01-24T12:10:22.400 に答える
1

使用禁止

public Intent putExtra (String name, String value)

電子メールの受信者を設定する場合、代わりに、電子メールに使用する必要がある文字列配列を受け入れる別の方法があります

public Intent putExtra (String name, String[] value)

だからあなたのブロック

for(int i = 0; i < to.length; i++)
{
    Log.i("String is", (String)to[i]);
    //String[] str = (String[])to[i];
    email.putExtra(Intent.EXTRA_EMAIL,",'" +(String)to[i] + "'");
}

単になるだろう

email.putExtra(Intent.EXTRA_EMAIL, to);

インテント、特に単一の文字列ではなく文字列配列を想定する EXTRA_EMAIL 引数の使用の詳細については、Android デベロッパー リファレンスを参照してください。

于 2013-01-24T08:32:38.147 に答える
0

私があなただったら、アクティビティ スレッド (または UI スレッド) にプロセスがないように、これを別のスレッドに配置します。これは、これを行う方法に関する優れたAndroid チュートリアルです。Android では、スレッド化を理解することが非常に重要です。時間があれば、このスレッドのチュートリアルもご覧ください。

button.Onclick(){
  // get all the messages information
  // the button to send the emails has been collected
  new SendEmailTask().execute(messages)
}

次に、非同期タスクですべてのメッセージを送信できます

SendEmailTask extends AsyncTask<Message,Void,Void>(){

  function doInBackground(Message... msgs){
    for(Message m : msgs){
     // process each of your messages
     // send the messages out
    }
  }
  function onPostExecute(){
    // tell the UI thread that you are finished
  }

}

幸運を!

于 2013-01-24T08:48:12.020 に答える