传递活动的意图

时间:2015-04-19 17:19:46

标签: android android-intent

我正在实施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()(我使用AsyncTask):

Intent myIntent = new Intent(LoginActivity.this, MainActivity.class);
finish();
myIntent.putExtra("username",mUsername);
myIntent.putExtra("email",mEmail)
setResult(1, myIntent);
LoginActivity.this.startActivity(myIntent);

再次在MainActivity内部我实现了onActivityResult()方法但是当它被执行时,Intent data收到的结果为空。我的代码出了什么问题?

* EDIT2 *

我按照@lqbal:

的建议移除LoginActivity.this.startActivity(myIntent)解决了这个问题
Intent returnIntent = new Intent();
 returnIntent.putExtra("username",mUsername);
 returnIntent.putExtra("email",mEmail);
 setResult(RESULT_OK,returnIntent);
 finish();

但还有一个问题: 在方法onActivityResult()中,我尝试将收到的数据分配给班级'领域没有成功。更多细节如下。

MainActivity类的开头,我分配了两个变量:

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完成后我仍然可视化旧值。为什么?

2 个答案:

答案 0 :(得分:1)

finish();放在startActivity()

之后

答案 1 :(得分:1)

使用startActivityForResult();启动活动,将已启动活动的结果返回到开始活动。

编辑: 按照这个,它将解决你的问题

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

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