Android选择默认邮件程序,2019-09-06 Android邮件跳转后无法自动填充默认收件箱问题...

调试一段邮件跳转代码发现每次邮件跳转后没有将默认收件人填充到收件人里。原始代码如下:

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赋值存放在堆中。

类似普通对象,通过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

8e28f17c808b

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值