You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android不同Activity间传递ArrayList并修改后回传使用?

问题1:注册信息回传后ArrayList未更新

错误原因

onActivityResult中错误使用getIntent()获取数据,该方法返回的是启动当前MainActivity的原始Intent,而非SignUpActivity回传的结果数据。回传数据实际存放在onActivityResult的入参data中。

修复代码

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // 增加data非空判断,避免异常
    if (requestCode == 101 && resultCode == Activity.RESULT_OK && data != null) {
        username_info = data.getStringArrayListExtra("username_info");
        password_info = data.getStringArrayListExtra("password_info");
        name_info = data.getStringArrayListExtra("name_info");
    }
}
问题2:用户名密码校验时崩溃

错误原因

  1. 执行username_info.indexOf(username)时,如果输入的用户名不存在于列表中,返回值为-1,后续调用password_info.get(-1)会触发索引越界异常
  2. 列表为空的判断逻辑在索引取值之后,列表为空时调用indexOf也会触发异常

修复代码

调整逻辑顺序:先判断列表是否为空,再校验用户名是否存在,最后匹配密码

@Override
public void onClick(View v) {
    username = username_input.getText().toString().trim();
    password = password_input.getText().toString().trim();

    if (username_info.isEmpty()) {
        Toast.makeText(MainActivity.this, "You must sign up first", Toast.LENGTH_SHORT).show();
        return;
    }

    int index = username_info.indexOf(username);
    if (index == -1) {
        Toast.makeText(MainActivity.this, "Incorrect username/password", Toast.LENGTH_SHORT).show();
        return;
    }

    if (password_info.get(index).equals(password)) {
        Toast.makeText(MainActivity.this, "make an activity", Toast.LENGTH_SHORT).show();
        // 跳转目标页面逻辑
    } else {
        Toast.makeText(MainActivity.this, "Incorrect username/password", Toast.LENGTH_SHORT).show();
    }
}

内容的提问来源于stack exchange,提问作者TejasR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:24:04