我有一个用于天气情况图标的HashMap作为类中的静态方法。 在我的适配器中,我得到了这个值和setImageResource,但是遇到了异常。我花了很多时间找到这个解决方案,但是有异常。这是我的HashMap的一部分:
static String getWeatherConditionList(Context mContext, String code) {
HashMap<String, String> weatherConditionMap = new HashMap<String, String>();
weatherConditionMap.put("0", String.valueOf(mContext.getResources().getDrawable(R.drawable.thunderstorm)));
weatherConditionMap.put("1", String.valueOf(mContext.getResources().getDrawable(R.drawable.tstormrain)));
return weatherConditionMap.get(code);
}
对于imageView,我使用了这个
imageForcast.setImageResource(Integer.getInteger(PublicMethods.getWeatherConditionList(mContext, code)));
答案 0 :(得分:1)
您的代码中存在一些问题。
每次调用getWeatherConditionMap()
时,都会重新创建weatherConditionMap
。
将可绘制对象放入哈希图中是个坏主意。
您真的需要static
语句吗?
您可以这样更改它。
private static HashMap<String, Integer> weatherConditionMap = new HashMap<>();
private static void createHashMap() {
weatherConditionMap.put("0", R.drawable.thunderstorm);
weatherConditionMap.put("1", R.drawable.tstormrain);
}
static int getWeatherContion(String code) {
return weatherConditionMap.get(code);
}
首先,您调用createHashMap()
,然后在调用方法中,
imageForcast.setImageResource(getWeatherCondition(code));
当然,您可以排除static
。
createHashMap()
应该被调用一次。如果找不到放置该函数的确切位置,请检查它是否在getter函数中被调用过。
static int getWeatherContion(String code) {
if (weatherConditionMap.size() == 0) {
createHashMap();
}
return weatherConditionMap.get(code);
}
或者,如果您只想要代码的映射资源,也许不需要HashMap。
static int getWeatherConditionMap(String code) {
switch (code) {
case "0":
return R.drawable.thunderstorm;
...
}
}
答案 1 :(得分:0)
首先,您应该始终添加问题中遇到的任何异常并解释代码流。
其次,为什么将int转换为字符串然后返回,或者尝试使用HashMap<String,Drawable>
并调用:
imageForcast.setImageDrawable(drawable)
;
答案 2 :(得分:0)
您应将可绘制对象存储在地图中
public static Drawable getWeatherConditionList(Context mContext, String code) {
HashMap<String, Drawable> weatherConditionMap = new HashMap<>();
weatherConditionMap.put("0",mContext.getResources().getDrawable(R.drawable.thunderstorm));
weatherConditionMap.put("1",mContext.getResources().getDrawable(R.drawable.tstormrain));
return weatherConditionMap.get(code);
}
您必须将图像设置为Drawable
imageForcast.setImageDrawable(PublicMethods.getWeatherConditionList(mContext, code));