2015-11-14 64 views
0

我正在尋找一種方法來迭代對象中包含的條目。目前,我錯誤地使用每種方法:Android Bundle迭代器放置和刪除條目

for (String key : bundle.keySet()) { 
    if ("videourl".equals(key.toLowerCase()) || "priority".equals(key.toLowerCase())) { 
     // Save value to bundle using lowercase key value 
     extras.putString(key.toLowerCase(), (String) extras.get(key)); 
     // Remove original version of this bundle entry 
     extras.remove(key); 
    } 
} 

與上面顯示的方法的問題是,它在將來不確定的時間任意的風險,不確定性的行爲。

我見過的迭代器實現了Map對象(例如https://stackoverflow.com/a/1884916/3957979):

for(Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); it.hasNext();) { 
    Map.Entry<String, String> entry = it.next(); 
    if(entry.getKey().equals("test")) { 
    it.remove(); 
    } 
} 

不過,我並沒有對捆綁的項目的直接訪問,所以我不能使用相同的方法。

請讓我知道,如果迭代器可以與Bundle對象一起使用,或者請建議一種不同的方法。

回答

0

不幸的是,我無法找到一種方法來使用迭代器來添加和刪除條目到Bundle中。我的解決方法是保存要添加到臨時Bundle對象中的條目,並將我想要刪除的條目的原始鍵名保存到列表中。請參閱下面的代碼:

// Loop through all messages and change the extras' key names to lowercase (only for keys of interest) 
Bundle tempBundle = new Bundle(); 
ArrayList<String> keysToBeRemoved = new ArrayList<>(); 
Bundle extras = messages.get(i).getExtras(); 

for (String key : extras.keySet()) { 
    // Check if key is not all lower case and if it is a key of interest 
    if (!key.equals(key.toLowerCase()) && isKeyOfInterest(key)) { 
     // Save value to bundle using lowercase key value 
     tempBundle.putString(key.toLowerCase(), extras.getString(key)); 
     // Add original version of this key to a list for later deletion 
     keysToBeRemoved.add(key); 
    } 
} 

// Remove original entries from message extras 
for (String originalKey : keysToBeRemoved) { 
    extras.remove(originalKey); 
} 

// Add all new bundle entries to message extras 
extras.putAll(tempBundle); 

如果有人確實弄清楚如何使用Iterator和Bundle,我很想知道!