2

データのリストを取得する必要があります。

だから私はlist.hereで文字列のarraylistを使用しました。マップに値を追加するにはどうすればよいですか。

以下のコードを使用しました:

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

(map.put( KEY_TITLE,((Element)nl.item(i)).getAttribute("name"));)これらの行で以下のエラーが発生しています。

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

これらのエラーをクリアするにはどうすればよいですか..plsはこれらの解決策を提供してくれます...

4

3 に答える 3

4

この行で

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

リストの代わりに単一の文字列を追加しています

その時点で文字列のリストを作成し、文字列をそのリストに追加してマップに追加する必要があります。

例えば:

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

あなたはループを持っています。私はあなたが達成したいことを知っていると思います。コードを更新します。これにより、マップ入力のオーバーライドを回避できます

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

メソッド 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);
        }
    }
于 2013-04-01T06:30:02.480 に答える
1

Stringa は aではないため、そのエラーが発生しますList<String>.

マップ宣言を に変更するか、HashMap<String, String>または で囲み、メソッドStringList<String>渡します。

于 2013-04-01T06:29:40.180 に答える
1

渡されたキーが間違っています。文字列を渡しているので、文字列のリストを渡す必要があります。したがって、リストを作成し、ハッシュマップに渡そうとしている値をリストに貼り付けてから、そのリストをハッシュマップに入れます。

于 2013-04-01T06:29:47.390 に答える