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

Android Spinner获取MySQL数据时提取DESIGN_CODE纯值的问题解决

问题分析与解决方案:Spinner选中项返回{DESIGN_CODE=1000}而非纯数值1000

我来帮你搞定这个问题!你遇到的情况很典型,咱们一步步拆解:

问题原因

从你给出的代码和返回结果能推断出来:你把ArrayList<HashMap<String, String>>直接作为数据源给了Spinner的适配器(虽然没贴showResult()方法,但结果已经暴露了问题)。当你调用spinner.getSelectedItem()时,拿到的其实是ArrayList里的HashMap对象,而HashMap的默认toString()方法就是输出{键=值}这种格式,所以才会得到{DESIGN_CODE=1000},而不是你想要的纯数值。

解决方法

这里给你三种靠谱的方案,你可以根据自己的需求选择:

方案1:直接提取HashMap中的值(最小改动)

如果不想修改适配器的数据源,直接在获取选中项时做类型转换并提取对应值:

// 将选中的对象强转为HashMap
HashMap<String, String> selectedMap = (HashMap<String, String>) spinner.getSelectedItem();
// 提取DESIGN_CODE对应的纯数值
String designCode = selectedMap.get(TAG_DESIGN_CODE);
// 此时designCode就是你要的"1000"

方案2:用自定义实体类替代HashMap(更规范)

创建一个实体类来封装设计编码,重写toString()方法让Spinner显示纯数值,同时方便后续扩展:

// 新建DesignCode实体类
public class DesignCode {
    private String code;

    public DesignCode(String code) {
        this.code = code;
    }

    public String getCode() {
        return code;
    }

    // 重写toString,Spinner会显示这个方法返回的内容
    @Override
    public String toString() {
        return code;
    }
}

然后修改你的数据源和适配器逻辑:

// 把mArrayList的类型改成ArrayList<DesignCode>
ArrayList<DesignCode> mArrayList = new ArrayList<>();

// 在showResult()方法解析JSON时,替换为添加DesignCode对象(示例逻辑)
JSONObject jsonObject = new JSONObject(mJsonString);
JSONArray jsonArray = jsonObject.getJSONArray(TAG_JSON);
for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject item = jsonArray.getJSONObject(i);
    String code = item.getString(TAG_DESIGN_CODE);
    mArrayList.add(new DesignCode(code));
}

// 设置Spinner适配器
ArrayAdapter<DesignCode> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, mArrayList);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

之后获取选中项的纯数值:

DesignCode selectedCode = (DesignCode) spinner.getSelectedItem();
String pureCode = selectedCode.getCode();

方案3:直接存储纯字符串到ArrayList(最简洁)

如果你的场景只需要显示和获取DESIGN_CODE的数值,完全可以简化数据源为String类型:

// 修改数据源类型为ArrayList<String>
ArrayList<String> mArrayList = new ArrayList<>();

// 解析JSON时直接添加纯字符串
JSONArray jsonArray = jsonObject.getJSONArray(TAG_JSON);
for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject item = jsonArray.getJSONObject(i);
    String code = item.getString(TAG_DESIGN_CODE);
    mArrayList.add(code);
}

// 设置Spinner适配器
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, mArrayList);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

这时获取选中项就和你最开始期望的一样:

String text = spinner.getSelectedItem().toString(); // 直接得到"1000"

补充提示

你代码里的showResult()方法是用来设置Spinner适配器的核心逻辑,记得根据你选的方案对应修改这部分哦。如果后续需要扩展更多字段,方案2的实体类方式会更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:06:37