Android 从活动中传达意图

Android 从活动中传达意图,android,android-intent,Android,Android Intent,我正在实施LoginActivity在线注册新帐户。登录或注册后,我启动一个新的意图,并尝试将新帐户数据传回MainActivity: Toast.makeText(context,"SUCCESS",Toast.LENGTH_LONG).show(); finish(); Intent myIntent = new Intent(LoginActivity.this, MainActivity.class); myIntent.putExtra("usernam

我正在实施
LoginActivity
在线注册新帐户。登录或注册后,我启动一个新的意图,并尝试将新帐户数据传回
MainActivity

Toast.makeText(context,"SUCCESS",Toast.LENGTH_LONG).show();
    finish();
    Intent myIntent = new Intent(LoginActivity.this, MainActivity.class);
        myIntent.putExtra("username",mUsername);
        myIntent.putExtra("email",mEmail);                  
    LoginActivity.this.startActivity(myIntent);
我想在
MainActivity
中接收数据,以便在导航抽屉的标题中添加用户名和电子邮件。在
MainActivity
中,我有以下字段:

public class MainActivity extends ActionBarActivity{
    String NAME = "Sign in";
    String EMAIL = "";

  //... ... ...  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  //... ... ...  

    Intent intent = getIntent();
    if(intent.getStringExtra("username")!=null){
        setAccount(intent);
    }
    firstTime();
  }
  public void setAccount(Intent intent){
        NAME = intent.getStringExtra("username");
        EMAIL = intent.getStringExtra("email");
  }   
}    
}

但在我登录/注册后,目的不是将我的数据返回到
MainActivity

有什么问题

****编辑****

我实施了以下措施:

Intent intent = new Intent(this, LoginActivity.class);
startActivityForResult(intent, PICK_ACCOUNT_REQUEST);
而不是

startActivity(new Intent(this, LoginActivity.class));
finish();
LoginActivity
内部
onPostExecute()
(我使用异步任务):

同样在
MainActivity
中,我实现了
onActivityResult()
方法,但当它执行时,
Intent data
接收的结果为空。我的代码怎么了

*EDIT2*

我通过删除
LoginActivity解决了这个问题。这个.startActivity(myIntent)
由@lqbal建议:

Intent returnIntent = new Intent();
 returnIntent.putExtra("username",mUsername);
 returnIntent.putExtra("email",mEmail);
 setResult(RESULT_OK,returnIntent);
 finish();
但还有一个问题: 在activityResult()的方法
中,我尝试将收到的数据分配给类的字段,但没有成功。更多详情见下文

main活动的开头
I类分配两个变量:

String NAME = "Sign in", EMAIL = "";
这两个值插入到我的导航抽屉中。因此,在我从
LoginActivity
收到结果后,我想更新导航抽屉中的这两个字段,并向用户显示其用户名和密码,我尝试这样做:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
    // Check which request we're responding to
    if (requestCode == PICK_ACCOUNT_REQUEST) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            // The user picked a contact.
            String usr = data.getStringExtra("username");
            String mal = data.getStringExtra("email");
            this.NAME = usr;this.EMAIL=mal;
        }
    }
}

没有成功,事实上,在完成
LoginActivity
之后,我仍然将旧值可视化。为什么?

put
finish()
startActivity()之后使用
startActivityForResult()
启动活动,将已启动活动的结果返回到启动活动

编辑: 遵循这一点,它将解决您的问题

Intent returnIntent = new Intent();
returnIntent.putExtra("username",mUsername); 
returnIntent.putExtra("email",mEmail); 
setResult(RESULT_OK,returnIntent);
finish();

您正在启动活动以获得结果,因此只需创建一个意图,设置结果并完成活动,无需再次启动活动。

如果
LoginActivity
是从
MainActivity
启动的,则应使用
startActivityForResult()
并使用
setResult(int,Bundle)
LoginActivity
中的
方法。移动finish()方法在所有意图操作之后,它将解决您的问题。如果是,则将我的答案标记为已接受。刚刚注意到您的代码。移除LoginActivity.this.startActivity(myIntent);从您编辑的代码,然后它将工作。由于您已为某个结果启动了活动,因此无需再次启动活动。只需完成活动,它就会将结果返回到ActivityResult()上的开始活动。如果有效,请接受我的答案。用代码编辑答案以解决问题。希望这有帮助。谢谢你,它起作用了!但是仍然存在一个问题:一旦方法
onActivityResult
获得
Intent data
结果,我就不能用所获得的数据更新类的字段(
NAME
EMAIL
)。我尝试分配它们,但我的UI一直显示旧值。是否可以在不重新启动活动的情况下更新类的字段?如果可以,请接受答案。就您的问题而言,您如何设置类的值?提供细节以便我能帮助你。
Intent returnIntent = new Intent();
returnIntent.putExtra("username",mUsername); 
returnIntent.putExtra("email",mEmail); 
setResult(RESULT_OK,returnIntent);
finish();