如何将字符串数组传递给android电子邮件意图

时间:2017-07-30 18:03:47

标签: android kotlin

我正在尝试以编程方式在kotlin发送电子邮件。

这是我的代码,我从我在网上找到的java示例中翻译过来。

package com.example.emaildemo

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

class MainActivity: AppCompatActivity() {

    override fun onCreate(savedInstanceState:Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val editTextTo:EditText  = findViewById(R.id.editText)
        val editTextSubject:EditText = findViewById(R.id.editText2)
        val editTextMessage:EditText = findViewById(R.id.editText3)
        val button1:Button = findViewById(R.id.button)

        button1.setOnClickListener(View.OnClickListener{

          val to = editTextTo.getText().toString()
          val subject = editTextSubject.getText().toString()
          val message = editTextMessage.getText().toString()

          val intent = Intent(Intent.ACTION_SEND)
          val addressees = arrayOf(to)
          intent.putExtra(Intent.EXTRA_EMAIL, addressees)
          intent.putExtra(Intent.EXTRA_SUBJECT, subject)
          intent.putExtra(Intent.EXTRA_TEXT, message)
          intent.setType("message/rfc822")
          startActivity(Intent.createChooser(intent, "Select Email Sending App :"))
       })
   }
}

它似乎工作正常,但“TO”字段未复制到用户的电子邮件应用程序中。 java代码说:

intent.putExtra(Intent.EXTRA_EMAIL, new String[]{TO}); 

并且android开发人员docs说Intent.EXTRA_EMAIL是“所有字符串数组”到“收件人电子邮件地址”。我该如何定义addressees变量?

编辑:我发现如果我硬编码我的电子邮件地址,

val addressees = arrayOf("me@email.com")

然后该应用程序按预期工作。当我到达电子邮件应用程序时,我的地址位于“收件人:”字段中,我可以向自己发送邮件。但是,如果我在程序中键入相同的地址,则它不会显示在电子邮件客户端中。而且,当我在调试器下查看它时,intent会以两种方式显示完全相同的值。 Curiouser和curiouser。

EDIT2

这是我的XML文件。 (不知怎的,我无法正确缩进前两行。)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="18dp"
    android:text="To"
    android:id="@+id/textView"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editText"
    android:layout_below="@+id/textView"
    android:layout_centerHorizontal="true"
    />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="18dp"
    android:text="Subject"
    android:id="@+id/textView2"
    android:layout_below="@+id/editText"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editText2"
    android:layout_below="@+id/textView2"
    android:layout_centerHorizontal="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="18dp"
    android:text="Message"
    android:id="@+id/textView3"
    android:layout_below="@+id/editText2"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:inputType="textMultiLine"
    android:lines="4"
    android:id="@+id/editText3"
    android:layout_below="@+id/textView3"
    android:layout_centerHorizontal="true" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Click Here To Send Email from android application programmatically"
    android:id="@+id/button"
    android:layout_below="@+id/editText3"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="44dp" />
</RelativeLayout>

2 个答案:

答案 0 :(得分:3)

您的 TO 声明看起来是正确的,我认为您不需要明确(即使用arrayOf<String>(to))。

修改

根据您的上次更新,to未被识别为String。以下代码有效......

            val to = "person@gmail.com"
            val subject = "Test"
            val message = "Test"

            val intent = Intent(Intent.ACTION_SEND)
            val addressees = arrayOf(to)
            intent.putExtra(Intent.EXTRA_EMAIL, addressees)
            intent.putExtra(Intent.EXTRA_SUBJECT, subject)
            intent.putExtra(Intent.EXTRA_TEXT, message)
            intent.setType("message/rfc822")
            startActivity(Intent.createChooser(intent, "Send Email using:"));

editTextTo.getText().toString()的调用是返回一个构建器或其他内容而不是真String。相反,请尝试拨打arrayOf(to.toString())

<强> EDIT2

这是一个有效的代码示例,即填写&#34; To&#34;电子邮件应用中的字段。

package com.x.edittextexp

import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.EditText

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val button: Button = findViewById(R.id.button)
        val editTextTo: EditText = findViewById(R.id.editTextTo)

        button.setOnClickListener(View.OnClickListener {
            val to = editTextTo.getText().toString()
            val subject = "Test"
            val message = "Test"

            val intent = Intent(Intent.ACTION_SEND)
            val addressees = arrayOf(to)
            intent.putExtra(Intent.EXTRA_EMAIL, addressees)
            intent.putExtra(Intent.EXTRA_SUBJECT, subject)
            intent.putExtra(Intent.EXTRA_TEXT, message)
            intent.setType("message/rfc822")
            startActivity(Intent.createChooser(intent, "Send Email using:"));
        })
    }
}

xml看起来像这样

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textEmailAddress"
    android:hint="person@gmail.com"
    android:id="@+id/editTextTo"/>

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="BUTTON"
    android:id="@+id/button"/>
</LinearLayout>

正如你所看到的,差异是微不足道的,但这是有效的,而你的并不是。我怀疑问题出在您的XML文件中。你能发贴吗?

答案 1 :(得分:0)

我尝试了Les使用arrayOf(to.toString())的建议,但是android studio灰显了.toString(),表明它已经知道它已经是一个字符串了。然后我试着更明确:

val addressees: Array<String> = arrayOf(to)

它有效!我根本不明白这一点。看起来kotlin不应该对类型推断有任何麻烦。也许一些大师会看到这个并解释它;我感兴趣并感激不尽。