使用具有不同活动和最终电子邮件意图的多个意图

Posted

技术标签:

【中文标题】使用具有不同活动和最终电子邮件意图的多个意图【英文标题】:Using Multiple intents with different activities and final email intent 【发布时间】:2018-06-10 07:29:36 【问题描述】:

我正在制作一个表单应用程序,用于收集信息并通过电子邮件发送。 MainActivity 收集电话号码,然后是警告消息活动,然后是名称活动等。我遇到的问题是将从 EditText 字段收集的数据发送到要作为电子邮件发送的最终协议活动对我不起作用。我到处寻找,但我无法弄清楚如何将用户发送到下一个活动,同时将输入数据发送到最终协议活动,以便可以通过电子邮件发送。

这是我目前所拥有的。

 public class MainActivity extends AppCompatActivity 

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    // Find the next button
    final Button next1 = (Button) findViewById(R.id.button);

    // Find the Edit Text Field to input Phone Number
    final EditText phoneField = (EditText) findViewById(R.id.edit_text_phone);

    // Set a click listener on the next button
    next1.setOnClickListener(new View.OnClickListener() 
        // The code in this method will be executed when the next1 Button is clicked on.
        @Override
        public void onClick(View view) 

            // sends data collected from edit text box to be sent to final page so it can be
            // sent in an email message.

            Intent phoneNumber = new Intent(MainActivity.this, AgreementActivity.class);
            phoneNumber.putExtra("phoneMessage", phoneField.getText().toString());
            startActivity(phoneNumber);

            //starts next activity
            Intent nextButton = new Intent(MainActivity.this, Warning.class);
            startActivity(nextButton);
        
    );


这是发送电子邮件的最终协议活动。 但是邮件主题行中的最终结果是“您的电话号码为空”

public class AgreementActivity extends AppCompatActivity 
@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.agreement_activity);


    // Find the submit button
    final Button submit = (Button) findViewById(R.id.button6);


    // This is the input from user for phone number field
    final Bundle phoneNumber = getIntent().getExtras();



    // Set a click listener on that View
    submit.setOnClickListener(new View.OnClickListener() 
        // The code in this method will be executed when the Submit Button is clicked on.
        @Override
        public void onClick(View view) 



            Intent intent = new Intent(Intent.ACTION_SENDTO);
            intent.setData(Uri.parse("mailto:"));
            intent.getBundleExtra("phoneMessage");
            intent.putExtra(Intent.EXTRA_SUBJECT, "Your Phone Number is " + phoneNumber);

            if (intent.resolveActivity(getPackageManager()) != null) 
                startActivity(intent);
            


        


    );

【问题讨论】:

不清楚那里问的是什么。 如果你有一个活动而不是三个,这会简单得多。话虽这么说......在phoneNumber.putExtra("phoneMessage", phoneField.getText().toString()) 中,您正在将一个名为phoneMessage 的额外附加到Intent。该值为String。在intent.getBundleExtra("phoneMessage") 中,您试图检索一个名为phoneMessageBundle 作为额外的。但是,没有名为 phoneMessageBundle。作为Kehinde points out,你需要使用getStringExtra(),而不是getBundleExtra() 是的,我同意滚动的一项活动会更容易,但由于我希望用户一次将信息输入到表单一个屏幕,因此我进行了多项活动。我确信有更好的方法。不过,我只编码了 1 个月。 【参考方案1】:

在您的 AgreementActivity 中,使用以下方式获取电话号码:

final String phoneNumber = getIntent().getStringExtra("phoneMessage");

【讨论】:

我使用此代码而不是捆绑包,但一旦我进入最后的活动并启动电子邮件,字符串仍然显示为 Null @JoshuaEdgar 但是 AgreementActivity 是最后的活动,对吧? 是的。我总共有 8 项活动。我只显示主要活动(电话号码),然后是协议活动(它提交从所有其他活动获得的信息) @JoshuaEdgar 因为AgreementActivity是从MainActivity启动的,所以phoneMessage不应该为null。 是否有可能来自 EditText 字段的输入文本在用户进入最终活动之前被破坏,因为它没有被转移到其间的所有活动?【参考方案2】:

我会扩展应用程序class like this,但是您可以找到其他方法。如果有人导航返回箭头,您确实需要考虑the backstack

【讨论】:

以上是关于使用具有不同活动和最终电子邮件意图的多个意图的主要内容,如果未能解决你的问题,请参考以下文章

Android:电子邮件和短信的不同意图

打开电子邮件附件时如何获取文件名和扩展名

如何从具有不同数据的通知中意图不同的活动?

NLP:按意图进行句子分割

如何解决android电子邮件意图问题?

尝试使用意图发送电子邮件时崩溃(Kotlin)