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
相关产品推荐
相关产品推荐

