下拉菜单选中二维数组下标0元素时如何获取对应下标1的参数值
问题根因
- 字符串比较逻辑错误:Java中String属于引用类型,
==运算符比较的是两个字符串的内存地址而非实际内容,你从AutoCompleteTextView取到的字符串和items数组中存储的字符串不是同一个对象,判断条件永远不成立,后续空值等异常逻辑触发崩溃 - 循环逻辑冗余:不需要内层遍历j变量,你需要匹配的只有items数组下标为0的显示值,内层遍历反而可能匹配到下标1的参数值,导致赋值逻辑混乱
- 缺少兜底逻辑:如果没有匹配到对应单位,直接操作控件赋值会触发空指针异常
修复代码
你可以直接替换原点击事件的逻辑:
calc.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String firstData = autoCompleteTextView.getText().toString().trim(); String secondData = autoCompleteTextView2.getText().toString().trim(); String firstUnitParam = ""; String secondUnitParam = ""; // 匹配第一个下拉选中单位对应的参数 for (int i = 0; i < items.length; i++) { if (items[i][0].equals(firstData)) { firstUnitParam = items[i][1]; break; } } // 匹配第二个下拉选中单位对应的参数 for (int i = 0; i < items.length; i++) { if (items[i][0].equals(secondData)) { secondUnitParam = items[i][1]; break; } } // 你可以在这里替换为自己的单位换算逻辑 if (!firstUnitParam.isEmpty() && !secondUnitParam.isEmpty()) { tvResult.setText(firstUnitParam); } else { tvResult.setText("请选择有效单位"); } } });
优化方案
如果不想每次点击都遍历数组,可以在初始化的时候提前把单位名和对应参数存入HashMap,后续取值更高效:
- 先定义全局HashMap存储映射关系
HashMap<String, String> unitParamMap = new HashMap<>();
- 初始化items数组时同步写入映射
String[][] items = { {"(kilogram)", "1"}, {"(gram)", "1000"}, {"(pound)", "2.20462262"}, {"(pound - troy)", "2.6792288807"}, {"(carat)", "5000"}, {"(ounce)", "35.2739619"}, {"(ounce - troy)", "32.1507466"}, {"(ton)", "0.001"} }; // 写入映射 for (String[] item : items) { unitParamMap.put(item[0], item[1]); }
- 点击事件里直接取值即可,不需要循环遍历
calc.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String firstData = autoCompleteTextView.getText().toString().trim(); String secondData = autoCompleteTextView2.getText().toString().trim(); String firstUnitParam = unitParamMap.get(firstData); String secondUnitParam = unitParamMap.get(secondData); if (firstUnitParam != null && secondUnitParam != null) { // 替换为自己的换算逻辑即可 tvResult.setText(firstUnitParam); } else { tvResult.setText("请选择有效单位"); } } });
内容的提问来源于stack exchange,提问作者Daniel Mohajer
相关产品推荐
相关产品推荐

