我正在实施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
完成后我仍然可视化旧值。为什么?
答案 0 :(得分:1)
将finish();
放在startActivity()
答案 1 :(得分:1)
使用startActivityForResult();
启动活动,将已启动活动的结果返回到开始活动。
编辑: 按照这个,它将解决你的问题
Intent returnIntent = new Intent();
returnIntent.putExtra("username",mUsername);
returnIntent.putExtra("email",mEmail);
setResult(RESULT_OK,returnIntent);
finish();
您正在开始活动以获得结果,因此只需创建一个意图,设置结果并完成活动,无需再次启动活动。