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

