我正在开发一款Android应用。我用HashMap将两个数组相互映射。我将这些数组更改为String [],并将它们映射到一起。它应该返回值,但它返回null。我不确定我哪里出错了。我在网上搜索过,但是我找不到任何有用的东西。我的代码如下:
StationList.java的一部分
Spinner2.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
String selectedValue = arg0.getItemAtPosition(arg2).toString();
String[] Yellow_ID = getResources().getStringArray(R.array.Yellow_ID);
String[] Yellow_Li = getResources().getStringArray(R.array.Yellow_Line);
Map<String[], String[]> myMap = new HashMap<String[], String[]>();
myMap.put(Yellow_Li, Yellow_ID);
String[] value = myMap.get(selectedValue);
tv12.setText(String.valueOf (value));
}
Value
在TextView
中返回null。我认为这是由于值没有映射到彼此。我很感激你能给我的任何帮助。
答案 0 :(得分:4)
根据您检索价值的方式,您希望在填充哈希地图时执行更类似的操作
Map<String, String> myMap = new HashMap<String, String>();
for (int i = 0; i < Yellow_Li.length(); i++) {
myMap.put(Yellow_Li[i], Yellow_ID[i]);
}
String value = myMap.get(selectedValue);
我假设String数组的大小相同,所以如果不是,你应该添加那个逻辑。
此外,如果数组的大小相同,那么你可以这样做,这样你就不必构建一个hashmap:
int index = -1;
for (int i = 0; i < Yellow_Li.length(); i++) {
if (Yellow_Li[i].equals(selectedValue)) {
index = i;
break;
}
}
String value = Yellow_ID[index]; //should do a check for -1 before you try to assign "value"
答案 1 :(得分:1)
您正在做的是在地图中创建单个条目,其中键值是对第一个String数组对象的引用,关联值是对第二个String数组对象的引用。地图不包含条目集合,我假设您尝试将一个数组(键)中的值映射到第二个数组(值)中的值,然后对键执行查找。
您需要遍历String数组,并且对于每次迭代,在地图中放置一个新条目,其中键是第一个字符串数组中的元素,值是第二个字符串数组中的元素。然后你会得到你想要的东西。
答案 2 :(得分:0)
您的方法的问题是数组的equals
方法使用对象标识。这使得它们不适合用作Map
键。具体来说,如果您提供原始键数组作为关键参数,Map.get
将仅为您提供匹配(即返回非null
引用)。不是另一个数组,其元素是原始数组元素的索引equal
。
当您尝试查找颜色时,您(显然)也使用了错误的键。您使用get
而不是String
进行String[]
。
话虽如此,如果......
,您的方法可能有效String[]
作为键,AND String[]
。答案 3 :(得分:0)
您正在使用密钥类型为Map
且值类型为String[]
的{{1}}。但是,用于检索值的密钥是String[]
类型(不是String
)。因此,即使只有一个String,它也可能没有与String-Array相同的哈希码。