我是android的新手。请帮我。我无法向多个收件人发送电子邮件。 这是我的代码。
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();
}
});
}
}
答案 0 :(得分:4)
首先你从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 :"));
答案 1 :(得分: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);
有关使用Intents特别是EXTRA_EMAIL参数的更多详细信息,请参阅android开发人员参考,该参数需要字符串数组,而不是单个字符串。
答案 2 :(得分:0)
如果我是你,我会把它放在一个不同的线程上,这样你就不会在Activity线程(或UI线程)上有任何进程。关于如何做到这一点,这是一个很好的android tutorial。在Android中理解线程非常重要。如果你有时间,我也会看这个threading tutorial。
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
}
}
祝你好运!