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

下拉菜单选中二维数组下标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,后续取值更高效:

  1. 先定义全局HashMap存储映射关系
HashMap<String, String> unitParamMap = new HashMap<>();
  1. 初始化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]);
}
  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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:27:01