调试一段邮件跳转代码发现每次邮件跳转后没有将默认收件人填充到收件人里。原始代码如下:
String myReciver = "XXXXXXX@qq.com"; //收件人
String mySubject = getString(R.string.theme); //主题
String myBody = adviceInfo.getText().toString().trim() +"\n来自于:"+userEmail.getText().toString().trim()+" "+userName.getText().toString().trim();
Intent myIntent=new Intent(android.content.Intent.ACTION_SEND);
myIntent.setType("plain/text"); //设置邮件格式
//当无法确认发送类型的时候使用如下语句
//intent.setType("*/*");
myIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{myReciver});
myIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, mySubject);
myIntent.putExtra(android.content.Intent.EXTRA_TEXT, myBody);
startActivity(Intent.createChooser(myIntent, "选择邮箱"));
发现出问题的就是这段:myIntent.putExtra(android.content.Intent.EXTRA_EMAIL, myReciver);
修改成如下代码就解决了:
myIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{myReciver});
不知道String myReciver = "XXXXXX@qq.com"; 为什么不行?看到网上有段代码是按照下面的形式赋值:
emailReciver = new String[]{"pop1030123@163.com", fulon@163.com};
string直接赋值是存在程序常量池中,发送邮件时程序跳转了,此时自然找不到字符串里的内容了,所有要用string new赋值存放在堆中。
网上解释了两种string赋值方式:https://www.jb51.net/article/128469.htm
类似普通对象,通过new创建字符串对象。String str = new String("Hello"); 内存图如下图所示,系统会先创建一个匿名对象"Hello"存入堆内存(我们暂且叫它AA),然后new关键字会在堆内存中又开辟一块新的空间,然后把"Hello"存进去,并且把地址返回给栈内存中的str, 此时AA对象成为了一个垃圾对象,因为它没有被任何栈中的变量指向,会被GC自动回收。
直接赋值。如String str = "Hello"; 首先会去缓冲池(常量池)中找有没有一个"Hello"对象,如果没有,则新建一个,并且入池,所以此种赋值有一个好处,下次如果还有String对象也用直接赋值方式定义为“Hello”, 则不需要开辟新的堆空间,而仍然指向这个池中的"Hello" 比如下图的str1和str2.
https://bbs.csdn.net/topics/390978088
网友评论