2015-12-11 1 views
1

Нужна помощь. Я разбираю xml и помещаю некоторые данные из него в HashMap. Пожалуйста, обратите внимание на кусок кода,:HashMap: получить ключевое значение по ключу во время события onClick (кадр)

final HashMap<String,String> urls = new HashMap<String,String>(); 
* * * 
NodeList nList = doc.getElementsByTagName("Row");      
     for (int z=0; z<nList.getLength(); z++) { 
     Node nNode = nList.item(z); 
     Element eElement = (Element) nNode; 

     NodeList a = eElement.getElementsByTagName("item"); 
     for (int i=0; i<a.getLength(); i++) {        
      urls.clear(); 
      String b = eElement.getElementsByTagName("item").item(i).getTextContent(); 
      String c = eElement.getElementsByTagName("url").item(i).getTextContent();   
      urls.put(b, c); 
      System.out.println(urls);      
       } 
      } 

Итак, у меня есть эти пары:

{Select product=bla-bla-bla} 
{Single Landmine Shirt=/www.sample.com/landmine-single-shirt} 
{Women's Silver & Black Bar=/www.sample.com/womens-silver-and-black-bar}       
{High Density Foam Rollers=/www.sample.com/high-density-foam-rollers} 

Теперь я хотел бы напечатать значение ключа (URL продукта) по ключу (Продукт), в то время как я выбираю соответствующий элемент из списка вниз.

/*comboBox:*/ addProduct.addItemListener(new ItemListener() { 

     @Override 
     public void itemStateChanged(ItemEvent e) { 
      String s = String.valueOf(addProduct.getSelectedItem()); 
      if ((e.getStateChange() == ItemEvent.SELECTED) && (urls.containsKey(s))) { 

      Object v = (String) urls.get(s);  
      System.out.println("Your url: " + v.toString()); 
      } 
     }  

    }); 

ИДК, что я делаю неправильно, но когда я просто добавление простых строк к карте: urls.put («Выбрать продукт», «тест URL»); -> Все работает хорошо. Прошу совета, как с этим бороться. Будем рады любым ответам

+0

Каков результат, который вы получаете? Обратите внимание, что вам не нужно указывать 'String', если вы собираетесь назначить' Object'. 'urls.get (s)' уже возвращает строку, почему бы не распечатать ее, не назначив ее? –

+0

@YassinHajaj, не могли бы вы предоставить здесь обновление кода? –

+0

'System.out.println (« Ваш url is: »+ urls.get (s))' ... Еще мой вопрос остается без ответа, каков ваш вывод? Вы уверены, что URL-адреса заполнены? –

ответ

1

Вам известно о том, что вы очищаете свой HashMap на каждой итерации. Это означает, что ваш HashMap закончится, содержащий один и только элемент: последние данные тега item.

for (int i=0; i<a.getLength(); i++) {        
    urls.clear(); 
    // ... 
} 

Избавьтесь от этой строки, и ваш urls должен быть заполнен правильно.

+0

Спасибо. Теперь выглядит намного лучше –

+1

У меня есть еще один вопрос. urls.clear(); -> это делается для правильного просмотра моих пар ключ-значение. есть для {} цикла, и мои данные смешаны неправильно. вот так: {Single Landmine Shirt = http: //www.sample.com/landmine-single-shirt, Выберите продукт = bla-bla-bla} {Женский Серебряный & Черный Бар = http: //www.sample .com/womens-silver-and-black-bar, Single Landmine Shirt = http: //www.sample.com/landmine-single-shirt, Выберите продукт = bla-bla-bla} –

+0

@EvgEvg Пожалуйста, разместите новый вопрос если у вас есть другой вопрос, я отвечу на него с удовольствием. –

Смежные вопросы