我正在实现一个 LoginActivity
在线注册一个新帐户。登录或注册后,我开始一个新的 Intent 并尝试将新帐户数据传递回 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");
}
}
但在我登录/注册后, Intent 不会将我的数据返回到 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
收到的结果为空。我的代码有什么问题?
* 编辑2 *
我按照@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
完成后,我仍然可以看到旧值。为什么?
最佳答案
使用 startActivityForResult();
启动 Activity ,将启动 Activity 的结果返回到启动 Activity 。
编辑: 按照这个,它会解决你的问题
Intent returnIntent = new Intent();
returnIntent.putExtra("username",mUsername);
returnIntent.putExtra("email",mEmail);
setResult(RESULT_OK,returnIntent);
finish();
您正在启动 Activity 以获取结果,因此只需创建一个 Intent、设置结果并完成 Activity,无需再次启动 Activity。
关于android - 从 Activity 中传递一个 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29733226/