【问题标题】:The method add(String) in the type ArrayList<String> is not applicable for the arguments (HashMap<String,String>)ArrayList<String> 类型中的方法 add(String) 不适用于参数 (HashMap<String,String>)
【发布时间】:2014-02-12 02:51:20
【问题描述】:

如何解决这个错误ArrayList类型中的add(String)方法不适用于参数(HashMap)。

我正在尝试将 androidhive.com xml 解析放在我的应用程序的自定义列表视图中

这是我的代码:

private void prepareListData() {


    //ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
    ArrayList<String> songsList = new ArrayList<String>();


    com.test.utilities.XMLParser parser = new com.test.utilities.XMLParser();
    String xml = parser.getXmlFromUrl(URL); // getting XML from URL
    Document doc = parser.getDomElement(xml); // getting DOM element

    NodeList nl = doc.getElementsByTagName(KEY_SONG);
    // looping through all song nodes <song>
    for (int i = 0; i < nl.getLength(); i++) {
        // creating new HashMap
        HashMap<String, String> map = new HashMap<String, String>();
        Element e = (Element) nl.item(i);
        // adding each child node to HashMap key => value
        map.put(KEY_ID, parser.getValue(e, KEY_ID));
        map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
        map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST));
        map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION));
        map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));

        // adding HashList to ArrayList
        songsList.add(map);
    }

    listDataHeader = new ArrayList<String>();
    listDataChild = new HashMap<String, ArrayList<String>>();

    // Adding child data
    listDataHeader.add("VRP Medical Bay");
    //listDataHeader.add("");
    //listDataHeader.add("");

    // Adding child data

    ArrayList<String> listUnderVRP = new ArrayList<String>();

    //listUnderVRP.add("eDataClinical");
    //listUnderVRP.add("Schedule");
    //listUnderVRP.add("Dictate");
    //listUnderVRP.add("View Messages");
    //listUnderVRP.add("Reports for Signature");
    //listUnderVRP.add("View Billing");
    //listUnderVRP.add("View State");


    listDataChild.put(listDataHeader.get(0), songsList); // Header, Child data
    //listDataChild.put(listDataHeader.get(1), nowShowing);
    //listDataChild.put(listDataHeader.get(2), comingSoon);
}

【问题讨论】:

  • 取消注释将数组列表声明为 ArrayList> 的行时会收到什么错误消息
  • 这部分出现错误 listDataChild.put(listDataHeader.get(0), songList); HashMap> 类型中的 put(String, ArrayList) 方法不适用于参数 (String, ArrayList>)

标签: android


【解决方案1】:

如何解决这个错误ArrayList类型中的add(String)方法不适用于参数(HashMap)。

如果您想在 songsList 上调用add(HashMap&lt;String, String&gt;) ArrayList,显然,您应该将其命名为ArrayList&lt;HashMap&lt;String, String&gt;&gt;。否则add 方法需要String(因为您当前的歌曲列表声明为ArrayList&lt;String&gt;)。

此外,如果您想在 listDataChild HashMap 上调用 put 并传递 String 作为键和您的 songsList ArrayList作为一个值,你应该将它声明为HashMap&lt;String, ArrayList&lt;HashMap&lt;String, String&gt;&gt;&gt;

换句话说:

private void prepareListData() {

   ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

   /* Same old code */

   /* 
    * Since listDataChild declared outside this method, do not forget to
    * replace the old declaration with 
    * HashMap<String, ArrayList<HashMap<String, String>>> listDataChild;
    */
   listDataChild = new HashMap<String, ArrayList<HashMap<String, String>>>();

   /* Same old code */
}

注意cmets。

【讨论】:

    【解决方案2】:

    你的意思是声明listDataChild = new HashMap&lt;String, ArrayList&lt;String&gt;&gt;();

    作为

    listDataChild = new HashMap&lt;String, ArrayList&lt;HashMap&lt;String, String&gt;&gt;&gt;();?

    【讨论】:

      【解决方案3】:

      我认为您应该像 ArrayList&lt;HashMap&lt;String, String&gt;&gt; songsList = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;(); 那样定义您的 ArrayList,如果您可以发布您的堆栈跟踪,这将有助于跟踪错误

      【讨论】:

      • 我不能在这里发布图片,因为我仍然缺乏积分。我的目标是,我在里面有导航抽屉我有可扩展列表,我只需要自定义我的列表视图,这就是为什么我遵循 androidhive.com 自定义列表视图教程,我发现很难在我的导航中使用 expandalist 应用程序实现它
      【解决方案4】:

      要将地图对象添加到您的 ArrayList,您应该像下面这样定义您的 ArrayList

      ArrayList<HashMap<String, String>>> songsList  = new ArrayList<HashMap<String, String>>>;
      songsList.add(map);
      

      【讨论】:

        猜你喜欢
        • 2013-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-09
        • 1970-01-01
        • 2015-05-25
        相关资源
        最近更新 更多