有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将ArrayList传递给另一个活动、修改它并返回使用?

我正在尝试创建一个项目的登录/注册部分,但在将注册信息传递回登录活动时遇到了问题。我在MainActivity中初始化了username_info、password_info和name_info,我想通过Intent将其发送到SignUpActivity

        Intent i = new Intent(this, SignUpActivity.class);
        i.putExtra("username_info", username_info);
        i.putExtra("password_info", password_info);
        i.putExtra("name_info", name_info);
        startActivityForResult(i, 101);

在另一个活动中添加值后,将按如下方式发回(两个活动中的ArrayList名称相同):

        Intent r = new Intent();
        r.putExtra("username_info", username_info);
        r.putExtra("password_info", password_info);
        r.putExtra("name_info", name_info);
        setResult(Activity.RESULT_OK, r);
        finish();
    }

这里收到了:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 101) {
            if (resultCode == Activity.RESULT_OK) {
                Bundle e = getIntent().getExtras();
                username_info = e.getStringArrayList("username_info");
                password_info = e.getStringArrayList("password_info");
                name_info = e.getStringArrayList("name_info");
            }
        }
    }

但是当我回到主活动时,数组列表没有改变。我是Android Studio的新手,所以我可能只是犯了一个简单的错误

编辑: 用户名和密码不匹配时我会崩溃,但它应该返回祝酒词:

@Override
            public void onClick(View v) {
                username = username_input.getText().toString();
                password = password_input.getText().toString();
                int index = username_info.indexOf(username);

                if (username_info.size() < 1) {
                    Toast.makeText(MainActivity.this, "You must sign up first", Toast.LENGTH_SHORT).show();
                }
                else if (password_info.get(index).equals(password)) {
                    Toast.makeText(MainActivity.this, "make an activity", Toast.LENGTH_SHORT).show();
                        // open activity
                }
                else {
                    Toast.makeText(MainActivity.this, "Incorrect username/password", Toast.LENGTH_SHORT).show();
                }
            }
        });

共 (1) 个答案

  1. # 1 楼答案

    不要在onActivityResult中使用getIntent(),而是使用Intent data

        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == 101) {
                if (resultCode == Activity.RESULT_OK) {
                    Bundle e = data.getExtras();
                    username_info = e.getStringArrayList("username_info");
                    password_info = e.getStringArrayList("password_info");
                    name_info = e.getStringArrayList("name_info");
                }
            }
        }