1

我正在开发一个 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));




        }

ValueTextView. 我认为这是由于这些值没有相互映射。我会很感激你能给我的任何帮助。

4

4 回答 4

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 数组的大小相同,因此如果不是,则应添加该逻辑。

此外,如果数组的大小相同,您可以这样做,这样您就不必构建哈希图:

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"
于 2013-10-02T21:15:15.993 回答
1

您正在做的是在映射中创建一个条目,其中键值是对第一个 String 数组对象的引用,而关联的值是对第二个 String 数组对象的引用。该映射不包含条目集合,我假设您正在尝试将一个数组(键)中的值映射到第二个数组(值)中的值,然后对键执行查找。

您需要遍历字符串数组,并为每次迭代在映射中放置一个新条目,其中键是第一个字符串数组中的元素,值是第二个字符串数组中的元素。然后你会得到你想要的。

于 2013-10-02T21:25:43.753 回答
0

您正在使用Mapwith key typeString[]和 value type String[]。但是,您用来检索值的键是类型String(不是String[])。因此,即使只有一个字符串,它也可能不会具有与字符串数组相同的哈希码。

于 2013-10-02T21:21:21.137 回答
0

您的方法的问题是equals数组的方法使用对象标识。这使得它们不适合用作Map钥匙。具体来说,如果您提供原始键数组作为键参数,Map.get只会给您一个匹配项(即返回非null引用) 。不是另一个数组,其元素是原始数组元素的索引。equal

当您尝试查找颜色时,您也(显然)使用了错误的键。您正在get使用 aString而不是 a String[]

话虽如此,如果... ,您的方法可能会奏效

  • 您实际上使用 aString[]作为键,并且
  • String[]以确保关键对象是同一个对象的方式获得了它。
于 2013-10-02T21:18:27.497 回答