2012-10-23 37 views
1

剛剛開始涉足Android,並被告知字符串不應該被硬編碼到Java中,而是放入字符串資源文件夾中。Android:使用hashmaps和字符串

我有一個存在的代碼,在一個hashmap中,鍵和值都是字符串。我將如何將字符串放入xml並將它們從Java部分完全取出?

如果我只是在創建字符串資源文件夾中的字符串,像這樣

<string name="hello">Hello.world</string> 

與問候是關鍵和現實存在的價值,然後只使用解析字符串。作爲分隔符?

Hopefuly我已經正確

+0

是的,它是正確的 – Blackbelt

+1

是的,這是correct.Check這些鏈接,如果您有更多的疑問http://stackoverflow.com/questions/2437891/java-hashmaps-and-using-strings-as-the-keys-does-the-string-value-get-stored?rq = 1或http://stackoverflow.com/questions/3613722/can-one-combine -android-resource-strings-into-new-strings?rq = 1 –

回答

3

有跡象表明,你可以在res文件夾中定義許多其他資源類型。你可以看到可用的herehere。爲了您的目的,一種方法可以定義數組在res /價值/ arrays.xml:

<resources> 
    <string-array name="hashmap"> 
     <item>key1</item> 
     <item>value1</item> 
     <item>key2</item> 
     <item>value2</item> 
     <item>key3</item> 
     <item>value3</item> 
    </string-array> 
</resources> 

,並在代碼:

Resources res = this.getResources(); 
String[] hashmapData = res.getStringArray(R.array.hashmap); 
HashMap<String, String> map = new HashMap<String, String>(); 
for(int i=0; i<hashmapData.length; i=i+2) { 
    map.put(hashmapData[i], hashmapData[i+1]);   
} 
1

解釋自己這真的取決於你使用它什麼。 「只包含XML中的字符串」教條非常棒,但它確實適用於用於用戶輸出的字符串,以便在翻譯應用程序時可以輕鬆更改它們。如果您在內部工作中使用鍵/值對,則不需要。

如果確實涉及輸出字符串,那麼是的,這將是一個很好的解決方法。你也可以考慮把關鍵和價值分成兩個XML節點 - 這取決於你在做什麼。

但總的來說,是的,這是方式。

0

正確。你不應該將字符串編碼到應用程序中。這是因爲您可以非常輕鬆地在您的應用中支持本地化(多種語言)。你的字符串都應該在/res/values/strings.xml之後,然後如果你想支持西班牙語,這些字符串(具有相同的name=值)將在/res/values-es/strings.xml中進行。然後在xml中訪問這些字符串,您只需使用@string/hello,而在java中使用getString(R.string.hello)。你可以在以下鏈接找到更多的信息:

0

你有三個選擇真如沒有官方支持對於鍵/值對

  1. 有你已經使用的方法,但首先我建議使用字符串數組而不是字符串。這樣你就可以將hashmap保存在一個地方。我建議使用隨機的unicode值而不是句號,因爲這樣可以降低分割字符串時的風險。

  2. 有2個字符串數組。第一個數組包含它們的鍵,第二個數組包含該值。通常使用這種方法,但您必須擔心耦合/確保任何編輯都反映在兩個字符串數組上。

  3. 這個建立在數字2上。你有一個鍵/值對的字符串數組,然後是一個包含數組的數組。你用obtainTypedArray()獲取「hashmap」,然後在for循環或其他東西中,使用TypedArray.getTextArray()返回單個String數組。這允許鍵和值的耦合。

    <串陣列名稱= 「程序hello_world」> <項>你好< /項目> <項目>世界< /項目> < /串陣列>

    <陣列名稱= 「散列映射」 > <項> @陣列/程序hello_world < /項目> < /陣列

(請忽略了可怕的格式,計算器似乎沒有采取很好的XML)

+0

感謝所有人的回覆。很新的XML並沒有意識到他們可以使用數組(somethingelse看看!)。雖然我不認爲我會把它加入除英語以外的其他語言我會認爲如果有任何事情只是爲了練習,我會把它放到XML中 – SocialistPig