如何在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:用户名密码校验时崩溃
错误原因
- 执行
username_info.indexOf(username)时,如果输入的用户名不存在于列表中,返回值为-1,后续调用password_info.get(-1)会触发索引越界异常 - 列表为空的判断逻辑在索引取值之后,列表为空时调用
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
相关产品推荐
相关产品推荐

