从活动中传递一个意图
Pass an intent from Activities
我正在实施 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
中接收数据,以便我可以在导航抽屉的 header 中添加用户名和电子邮件。在 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");
}
}
}
但在我 login/register 之后,意图不会将我的数据返回到 MainActivity
...
有什么问题?
* ***编辑* ***
我实现了这个:
Intent intent = new Intent(this, LoginActivity.class);
startActivityForResult(intent, PICK_ACCOUNT_REQUEST);
而不是
startActivity(new Intent(this, LoginActivity.class));
finish();
In LoginActivity
inside 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()
方法中,我尝试将接收到的数据分配给 class' 字段,但没有成功。下面有更多详细信息。
在MainActivity
开头class我赋值了两个变量:
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
完成后我仍然想象旧值。为什么?
将finish();
放在startActivity()
之后
使用 startActivityForResult();
启动 activity 以获取从启动 activity 返回到启动 activity 的结果。
编辑:
按照这个,它会解决你的问题
Intent returnIntent = new Intent();
returnIntent.putExtra("username",mUsername);
returnIntent.putExtra("email",mEmail);
setResult(RESULT_OK,returnIntent);
finish();
您正在启动 activity 以获得结果,因此只需创建一个意图、设置结果并完成 activity,无需再次启动 activity。
我正在实施 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
中接收数据,以便我可以在导航抽屉的 header 中添加用户名和电子邮件。在 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");
}
}
}
但在我 login/register 之后,意图不会将我的数据返回到 MainActivity
...
有什么问题?
* ***编辑* ***
我实现了这个:
Intent intent = new Intent(this, LoginActivity.class);
startActivityForResult(intent, PICK_ACCOUNT_REQUEST);
而不是
startActivity(new Intent(this, LoginActivity.class));
finish();
In LoginActivity
inside 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()
方法中,我尝试将接收到的数据分配给 class' 字段,但没有成功。下面有更多详细信息。
在MainActivity
开头class我赋值了两个变量:
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
完成后我仍然想象旧值。为什么?
将finish();
放在startActivity()
使用 startActivityForResult();
启动 activity 以获取从启动 activity 返回到启动 activity 的结果。
编辑: 按照这个,它会解决你的问题
Intent returnIntent = new Intent();
returnIntent.putExtra("username",mUsername);
returnIntent.putExtra("email",mEmail);
setResult(RESULT_OK,returnIntent);
finish();
您正在启动 activity 以获得结果,因此只需创建一个意图、设置结果并完成 activity,无需再次启动 activity。