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

Android Java如何将Item_sumber数组转为String数组适配Spinner控件

报错根因

你的Arrays.copyOf()方法只能对同类型或存在继承关系的数组做拷贝,无法直接将Item_sumber类型的数组转换为String类型数组,类型不匹配所以触发了ArrayStoreException。

适配Spinner的两种实现方案

方案1:提取显示字段生成String适配器

遍历Item_sumber数组,提取要显示的nama_sumber字段组成字符串列表,再绑定到Spinner,同时可以直接保留原始对象列表方便取值:

Formdata jsonResponse = response.body();
Item_sumber[] sumberArr = jsonResponse.getSumber();
List<String> sumberNameList = new ArrayList<>();
final List<Item_sumber> sumberDataList = new ArrayList<>();
if (sumberArr != null) {
    for (Item_sumber item : sumberArr) {
        sumberNameList.add(item.getNama_sumber());
        sumberDataList.add(item);
    }
}
ArrayAdapter<String> adapter_sumber = new ArrayAdapter<>(getBaseContext(), android.R.layout.simple_spinner_dropdown_item, sumberNameList);
dropdown_sumber.setAdapter(adapter_sumber);
// 选中监听直接取对应对象的ID,避免下标计算错误
dropdown_sumber.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        id_sumber = sumberDataList.get(i).getId();
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        id_sumber = "";
    }
});

方案2:自定义适配Item_sumber类型的ArrayAdapter(更推荐)

直接让适配器适配Item_sumber对象,重写显示方法绑定文本,无需额外做数组转换,后续要获取选中项的任意字段都更灵活:

Formdata jsonResponse = response.body();
Item_sumber[] sumberArr = jsonResponse.getSumber();
if (sumberArr == null) {
    return;
}
ArrayAdapter<Item_sumber> adapter = new ArrayAdapter<Item_sumber>(getBaseContext(), android.R.layout.simple_spinner_dropdown_item, sumberArr) {
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView view = (TextView) super.getView(position, convertView, parent);
        view.setText(getItem(position).getNama_sumber());
        return view;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        TextView view = (TextView) super.getDropDownView(position, convertView, parent);
        view.setText(getItem(position).getNama_sumber());
        return view;
    }
};
dropdown_sumber.setAdapter(adapter);
// 选中时直接拿到完整的Item_sumber对象
dropdown_sumber.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        Item_sumber selectedItem = (Item_sumber) adapterView.getSelectedItem();
        id_sumber = selectedItem.getId();
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }
});

内容的提问来源于stack exchange,提问作者Alifa Al Farizi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:36:02