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

Android多单位转换器开发:Spinner选中单位后实现转换功能的问题

Android多单位转换器代码修正方案

核心问题排查

你的代码存在以下关键问题导致转换功能失效:

  • 单位判断逻辑错误:if (spinnerdropdown.this=="Weight")是将Activity实例与字符串直接比较,永远不会成立,必须获取Spinner选中的实际选项文本。
  • 缺少输入合法性校验:未处理EditText为空或输入非数字的情况,会触发NumberFormatException导致崩溃。
  • 转换逻辑单一:仅实现了重量的单方向转换,结构可优化以支持更多单位类别。

修正后的完整代码

public class spinnerdropdown extends AppCompatActivity {
    TextView textView1;
    CardView crdvspinner;
    Spinner unitspinner;
    EditText edtinputspinner;
    Button convertbtnspinner;
    TextView txtvresultspinner;
    String[] unitarray = {"Currency", "Weight", "Liquid", "Temperature", "Area", "Length"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_spinnerdropdown);
        textView1 = findViewById(R.id.textView1);
        crdvspinner = findViewById(R.id.crdvspinner);
        unitspinner = findViewById(R.id.unitspinner);
        edtinputspinner = findViewById(R.id.edtinputspinner);
        convertbtnspinner = findViewById(R.id.convertbtnspinner);
        txtvresultspinner = findViewById(R.id.txtvresultspinner);

        ArrayAdapter<String> adapter = new ArrayAdapter<>(spinnerdropdown.this, 
                android.R.layout.simple_spinner_item, unitarray);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        unitspinner.setAdapter(adapter);

        unitspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                String value = adapterView.getItemAtPosition(i).toString();
                Toast.makeText(spinnerdropdown.this, value, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
            }
        });

        convertbtnspinner.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String inputStr = edtinputspinner.getText().toString().trim();
                // 输入合法性校验
                if (inputStr.isEmpty()) {
                    txtvresultspinner.setText("请输入数值");
                    return;
                }

                double inputValue;
                try {
                    inputValue = Double.parseDouble(inputStr);
                } catch (NumberFormatException e) {
                    txtvresultspinner.setText("请输入有效数字");
                    return;
                }

                // 获取选中的单位类别
                String selectedUnit = unitspinner.getSelectedItem().toString();
                double result = 0;
                String resultText = "";

                // 根据不同单位类别执行转换逻辑
                switch (selectedUnit) {
                    case "Weight":
                        // 千克转磅示例
                        result = inputValue * 2.205;
                        resultText = inputValue + " 千克 = " + String.format("%.3f", result) + " 磅";
                        break;
                    case "Temperature":
                        // 摄氏度转华氏度示例
                        result = (inputValue * 9/5) + 32;
                        resultText = inputValue + " ℃ = " + String.format("%.1f", result) + " ℉";
                        break;
                    case "Length":
                        // 米转英尺示例
                        result = inputValue * 3.28084;
                        resultText = inputValue + " 米 = " + String.format("%.3f", result) + " 英尺";
                        break;
                    default:
                        resultText = "暂未支持该类别转换";
                        break;
                }

                txtvresultspinner.setText(resultText);
            }
        });
    }
}

关键修改说明

  • 正确获取选中单位:通过unitspinner.getSelectedItem().toString()获取Spinner当前选中的单位类别,替代原错误的实例比较逻辑。
  • 输入校验:添加空值检查与异常捕获,避免非法输入导致崩溃,并给用户明确提示。
  • 结构化转换逻辑:使用switch-case替代单一if判断,便于后续扩展更多单位类别的转换规则。
  • 友好结果展示:格式化结果字符串,显示原单位与转换后的单位,提升用户体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:33:29