目前我正在执行涉及HashMap
的任务。而我现在正在做的是在HashMap
中插入3个变量。我成功了,但有关于语法或声明的错误(我不知道哪一个)。有人可以帮助我检测我的语法/声明有什么问题并提出解决方案吗?以下是我的代码:
public static void showAVMode(Context context, String AVMode) {
mContext = context;
spotText = getAvModeText(AVMode);
spotType= "";
call_Spot=3000;
if(mContext != null) {
spotType=mContext.getString(R.string.AVM_name);
currentSpot=5;
show();
} else {
TvLog.d(TAG, "context is null");
}
}
.............................
private static String getAvModeText(String mode){
String avMode = mContext.getString(R.string.AVM_stand);
HashMap<String,Drawable> AvModeIconTHX = new HashMap<String,Drawable>();
AvModeIconTHX.put(mContext.getString(R.string.AVM_movTHX), mContext.getDrawable(R.drawable.set_thx));
HashMap<String,Drawable> AvModeIconES = new HashMap<String,Drawable>();
AvModeIconES.put(mContext.getString(R.string.AVM_stand), mContext.getDrawable(R.drawable.set_es));
HashMap<String,Drawable> AvModeMovie = new HashMap<String,Drawable>();
AvModeMovie.put(mContext.getString(R.string.AVM_mov), null);
HashMap<String,Drawable> AvModeGame = new HashMap<String,Drawable>();
AvModeGame.put(mContext.getString(R.string.AVM_game), null);
HashMap<String,Drawable> AvModePC = new HashMap<String,Drawable>();
AvModePC.put(mContext.getString(R.string.AVM_PC), null);
HashMap<String,Drawable> AvModeUser = new HashMap<String,Drawable>();
AvModeUser.put(mContext.getString(R.string.AVM_user), null);
HashMap<String,Drawable> AvModeDyn = new HashMap<String,Drawable>();
AvModeDyn.put(mContext.getString(R.string.AVM_dyn), null);
HashMap<String,Drawable> AvModeDynFix = new HashMap<String,Drawable>();
AvModeDynFix.put(mContext.getString(R.string.AVM_dynFix), null);
HashMap<String,HashMap<String,Drawable>> mapAvMode = new HashMap<String,HashMap<String,Drawable>>();
mapAvMode.put(TvFunctionID.AVMode.AVMODE_STANDARD, AvModeIconES);
mapAvMode.put(TvFunctionID.AVMode.AVMODE_MOVIE, AvModeMovie);
mapAvMode.put(TvFunctionID.AVMode.AVMODE_MOVIE_THX, AvModeIconTHX);
mapAvMode.put(TvFunctionID.AVMode.AVMODE_GAME, AvModeGame);
mapAvMode.put(TvFunctionID.AVMode.AVMODE_PC, AvModePC);
mapAvMode.put(TvFunctionID.AVMode.AVMODE_CUSTOM, AvModeUser);
mapAvMode.put(TvFunctionID.AVMode.AVMODE_DYNAMIC, AvModeDyn);
mapAvMode.put(TvFunctionID.AVMode.AVMODE_DYNAMIC_FIXED, AvModeDynFix);
if(mapAvMode.containsKey(mode)) {
avMode = mapAvMode.get(mode);
}
return avMode;
}
错误位于代码mapAvMode.get(mode);
,其中显示Type mismatch: cannot convert from HashMap<String,Drawable> to String
。有quickfix但它没有解决错误。有人可以帮我弄这个吗?我认为我的代码可以比这短得多。任何建议都会非常感激。
答案 0 :(得分:1)
您的avMode变量是类型String
,而mapAvMode返回的对象是HashMap<String,Drawable>
。在HashMap中,第一个参数是键(此处为String),第二个参数是值(此处为Drawable)。如果要从此HashMap获取String值,则应执行:avMode = mapAvMode.get(mode).get(yourParam);
更新:抱歉,我提供了错误的信息。所以我正在纠正我的答案。 mapAvMode.get(mode)
将返回HashMap<String, Drawable>
,如果您这样写:
mapAvMode.get(mode).get(yourParam);
。
它将返回Drawable。因此,您的avMode变量必须是HashMap,并且此行将起作用:
avMode = mapAvMode.get(mode)
或者它必须是Drawable,这一行可行:
avMode = mapAvMode.get(mode).get(yourParam);
答案 1 :(得分:0)
`mapAvMode.get(mode)`
返回一个drawable,你将其类型转换为String,将你的avMode更改为drawable它将解决你的问题,HashMap.get(key)
用于根据你传递的键得到值,这里我们的值是可绘制的。