android - 从 Activity 中传递一个 Intent

标签 android android-intent

我正在实现一个 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/

相关文章:

java - 只有最后一个元素在 listView 中多次显示

java - 在子菜单上实现 onClick 以开始新 Activity

android - finish() 在第一次运行后调用时不关闭 Activity

android - onActivityResult 正在调用而没有完成结果的调用 Activity

android - Parse.com 推送通知问题。取消订阅不起作用,仍在接收推送通知。(Android)

c# - Unity 的 Google Play 服务插件有一些错误

android - 如何检测哪个 Activity 导致我的 Activity onPause

android - 从最近的托盘中删除 Android 应用程序时,Firebase(FCM)通知不会出现

java - 传递 2 个字符串以用于新 Activity

android - 如何使用 Application 类将数据从一个 Activity 传递到另一个 Activity