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
之后,我仍然将旧值可视化。为什么? putfinish()代码>在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();