简体   繁体   中英

add the value in Arraylist<string,List<String>> in hashmap android

I have to fetch the lis of data.

So i have used the arraylist of string with list.here how can i add the value on map.

I have used below code:

       static final String KEY_TITLE = "Category";
         static final String KEY_ARTICLE = "article";
          static final String KEY_IMAGE = "image";


 final ArrayList<HashMap<String,  List<String>>> songsList = new ArrayList<HashMap<String,  List<String>>>();
        XMLParser parser = new XMLParser();
        String xml = parser.getXmlFromUrl(URL); // getting XML from URL
        Document doc = parser.getDomElement(xml); // getting DOM element

        NodeList nl = doc.getElementsByTagName(KEY_TITLE);
        NodeList nl1 = doc.getElementsByTagName(KEY_ARTICLE);
        NodeList nl2 = doc.getElementsByTagName(KEY_IMAGE);
        System.out.println(nl.getLength());
        for (int i = 0; i < nl.getLength(); i++) {
           //System.out.println(nl.getLength());
            HashMap<String, List<String>> map = new HashMap<String, List<String>>();
            map.put( KEY_TITLE,((Element)nl.item(i)).getAttribute("name"));
           for (int j = 0; j < nl1.getLength(); j++) {
              map.put( KEY_ARTICLE,((Element)nl1.item(j)).getAttribute("title"));
              map.put( KEY_IMAGE,((Element)nl2.item(j)).getAttribute("url"));
             }
           songsList.add(map);
          }

Here am getting the below error on these (map.put( KEY_TITLE,((Element)nl.item(i)).getAttribute("name"));) line:

The method put(String, List<String>) in the type HashMap<String,List<String>> is not applicable for the arguments (String, String)

How can i clear these error ..pls provide me solution for these ...

at this line

 map.put( KEY_TITLE,((Element)nl.item(i)).getAttribute("name"));

you are adding a single string to instead of List

You have to create a List of String at that point and add your String to it and at the list to your map.

eg:

  List<String> myList= new ArrayList<String>();
  myList.add((Element)nl.item(i)).getAttribute("name"));
  map.put( KEY_TITLE,myList);

you have a loop. I think that i know what you want to achieve i'll update my code. This can help you avoiding overriding the map input

HashMap<String, List<String>> map = new HashMap<String, List<String>>();

        for(int i = 0; i < nl.getLength(); i++) {
             String name = (Element) nl.item(i)).getAttribute("name");
             populateMap(map, name, KEY_TITLE);
            for(int j = 0; j < nl1.getLength(); j++) {
                String title=(Element) nl1.item(j)).getAttribute("title");
                populateMap(map, title, KEY_ARTICLE);

                String url=(Element) nl2.item(j)).getAttribute("url");
                populateMap(map, url, KEY_IMAGE);
            }
            songsList.add(map);
        }

Method populateMap()

void populateMap(HashMap<String, List<String>> map, String value, String key) {
        List<String> myList;
        if(!map.containsKey(key)) {
            myList = new ArrayList<String>();
            myList.add(value);
            map.put(key, myList);
        } else {
            myList = map.get(key);
            myList.add(value);
        }
    }

You get that error because a String is not a List<String>.

Either change your map declaration to HashMap<String, String> or enclose your String into a List<String> and give it to the method.

The key you're passing in is wrong. You're passing in a string, you need to pass in a list of strings. So create a list, stick the value you're trying to pass into the hash map into the list, then put that list into the hash map.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM