意图没有发送到主要活动

时间:2014-10-02 19:54:01

标签: android android-intent

我有登录活动,这是主要活动。 第二个是注册。 我试图在注册过程后将注册表活动的电子邮件发送回登录活动但是我无法从意图中获取价值。 我注意到主要活动的清单中有一些过滤器,但不确定它是否会导致这样的问题。

注册活动:

Intent myIntent = new Intent(Register.this, LoginPage.class);
myIntent.putExtra("registerEmail", mail);
Register.this.startActivity(myIntent);

主要活动:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login_page);
    Intent intent = getIntent();
    String value = intent.getStringExtra("registerEmail");
    if (value!=null)
    {
       ...
    }
}

清单:

    <activity
        android:name=".LoginPage"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

当我从Register返回loginPage时,该值始终为null,我确信我已将内容发送到Register活动中的intent

提前谢谢。

4 个答案:

答案 0 :(得分:3)

当您从活动A开始另一项活动(活动B)时,为了将结果返回活动A,您应该使用startActivityForResult()

但是,如果您的主要活动是使用Intent.FLAG_ACTIVITY_SINGLE_TOP启动的,则可以使用主要活动中的onNewIntent()拦截意图:

@Override
    protected void onNewIntent(Intent intent) {
        String value = intent.getStringExtra("registerEmail");
        super.onNewIntent(intent);
    }

答案 1 :(得分:1)

您在清单文件中看到的意图过滤器是向Android框架指示首次启动应用时应显示的活动。常见的内部操作不需要Intent过滤器,例如在您自己的应用程序中启动新活动。

否则您的代码看起来不错。我们能从每个类中看到更多的代码(例如,触发意图的地方)吗?

答案 2 :(得分:0)

也许你应该在返回登录活动时读取onResume上的值registerEmail

答案 3 :(得分:0)

看起来您希望使用startActivityForResult,意图是注册活动可以识别并从onDestroy方法调用sendResult(Intent intent)。通过该意图,您可以将所需的数据捆绑到其中,并从LoginActivity覆盖onActivityResult以获取捆绑包意图数据。