2013-10-02 35 views
1

我開發一個Android應用程序。我使用HashMap將兩個數組映射到彼此。我將這些數組更改爲String [],並將它們映射到一起。它應該返回值,但它返回null。我不確定我要去哪裏錯。我在網上搜索,但我沒有發現任何有用的東西。我的代碼如下:如何映射兩個String []彼此

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空的

部分。我認爲這是由於這些值不是相互映射的。我希望你能給我提供任何幫助。

+1

您的映射鍵的類型爲String [],並且您正在爲'String'鍵獲取值。你爲什麼期望從'null'迴歸你?如果你能解釋你確切想要做的事情會好得多。 –

+0

@RohitJain解釋它!我將如何將String selectedValue轉換爲String []? – hichris123

回答

4

基於你如何獲取你的價值,你想要做的事更多類似這樣的填充你的HashMap時

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); 

我認爲字符串數組的大小相同,所以如果他們不應該添加在這種邏輯

而且,如果數組的大小相同,你可以使這樣的事情,所以你不必建立一個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" 
+0

對於第一個選項的迭代器,如果我有String []的字符串,而不是字符串,該怎麼做? – hichris123

+0

你的意思是arg0.getItemAtPosition(arg2)返回一個String []?如果是這樣,那裏包含了什麼?你打算如何比較它們?每個值都需要相同嗎? – dymmeh

+0

這只是在微調器上選擇的項目。這個問題是,Yellow_Li [i]等於一個字符串,而不是一個字符串[],並且我的數組設置爲等於String []的,所以它不能正確解析。 – hichris123

0

的問題,你r方法是數組的equals方法使用對象標識。這使得它們不適合用作Map鍵。具體而言,Map.get只會給你的匹配(即,返回一個非null參考)如果提供了原始鍵陣列作爲關鍵參數。不是另一個數組,其元素索引爲索引equal到原始數組元素。

你也用錯了鍵,當你試圖查找顏色(顯然)。您正在執行getString而不是String[]

說了這麼多,你的方法威力,如果...

  • 你實際使用的String[]作爲重點工作,
  • 你獲得在確保一種方式String[]的關鍵對象是同一個對象。
0

您使用的是Map與關鍵型String[]和價值型String[]。但是,您用來檢索該值的關鍵字是String(不是String[])。因此即使只有一個字符串,它也可能不會有與String-Array相同的哈希碼。

+0

那麼如何將字符串轉換爲字符串[]? – hichris123

+0

String [] strings = new String [] {selectedValue} – LuCio

1

你在做什麼是創建在地圖,其中關鍵值是參照第一個String數組對象和相關值的一個條目是參照第二String數組對象。該映射不包含條目集合,其中我假設您試圖將一個數組(鍵)中的值映射到第二個數組(值)中的值,然後對該鍵執行查找。

用戶需要通過字符串陣列和對於每次迭代迭代放在地圖其中鍵是所述第一字符串數組中的元素和的值是所述第二串數組中的元素的新的條目。然後,你會最終得到你想要的。