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

Android中JSON字符串Drawable转int赋值ImageView报错问题

问题

JSON中以字符串形式存储Drawable资源:

{"title": "title1","thumb": "R.drawable.image1"},{"title": "title2","thumb": "R.drawable.image2"}

解析代码如下:

JSONObject obj = myjArry.getJSONObject(i);
String thumb = obj.getString("thumb");

后续尝试在Adapter中为ImageView设置Drawable时:

int tm = Integer.parseInt(actorList.get(position).getThumb());
holder.thumb.setImageResource(tm);

抛出以下错误:

java.lang.NumberFormatException: For input string: "R.drawable.image1"

备注:尽量避免使用getIdentifier()方法。

解决方案

方法1:JSON中直接存储资源ID的整数值

将JSON里的thumb字段替换为对应Drawable资源的实际整数值(可在项目自动生成的R.java文件中找到对应资源的ID值):

{"title": "title1","thumb": 2131165230},{"title": "title2","thumb": 2131165231}

解析时直接读取整数类型:

int thumbResId = obj.getInt("thumb");

Adapter中直接调用setImageResource:

holder.thumb.setImageResource(actorList.get(position).getThumb());

方法2:建立字符串到资源ID的映射表

若必须保留JSON中的字符串形式,可在代码中提前创建字符串与资源ID的映射关系:

private static final Map<String, Integer> THUMB_RESOURCE_MAP = new HashMap<>();
static {
    THUMB_RESOURCE_MAP.put("R.drawable.image1", R.drawable.image1);
    THUMB_RESOURCE_MAP.put("R.drawable.image2", R.drawable.image2);
    // 按需添加其他资源映射
}

解析后通过映射表获取对应资源ID:

String thumbStr = obj.getString("thumb");
int thumbResId = THUMB_RESOURCE_MAP.get(thumbStr);

Adapter中使用资源ID设置图片:

holder.thumb.setImageResource(actorList.get(position).getThumb());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:54:57