更新hashmap中的String值

时间:2013-12-12 09:55:09

标签: java android android-listview arraylist hashmap

我有一个hashmap,每次从其他hashmap中选择一行项时都会获取数据。在将数据存储到hashmap之前,我已经检查了arraylist。此检查用于检查itemID是否存在于arraylist中。如果是,我想更改arraylist中存在的itemID的数量值。目前,问题是数量永远不会更新或更改。

我知道这不是最好的方法,但可以帮助我解决这个问题吗?提前致谢。

这是我目前的代码

private void listOrder(String itemValue, String itemID)
{   
    HashMap<String, String> map = new HashMap<String, String>();

    String quantity = "1";

    map.put(FOODID3, itemID);
    map.put(FOODNAME3, itemValue);  
    map.put(FOODQUANTITY3, quantity);

    boolean found = false;

    if (!LIST3.isEmpty())
    {
        for (int i = 0; i < LIST3.size(); i++)
        {
            String exists = null;
            exists = LIST3.get(i).get(FOODID3).toString();

            if (exists.equals(itemID))
            {
                found=true;
                String b = map.get(FOODQUANTITY3);
                int quantityy = Integer.parseInt(b) +1;
                String c = Integer.toString(quantityy);
                System.out.println(c);
                map.put(FOODQUANTITY3, c); // I can't update the value here
                break;
            }
        }
    }               

    if (!found)
    {
        LIST3.add(map);
    }

    LISTORDER = (ListView) findViewById(R.id.listOrder);

    List3Adapter adapter = new List3Adapter(MainActivity.this, LIST3);
    LISTORDER.setAdapter(adapter);
}

3 个答案:

答案 0 :(得分:3)

问题是,如果找到密钥,则表示您正在更新您创建的新地图,该地图未存储在list3中。

尝试以下代码:

private void listOrder(String itemValue, String itemID)
{   
    HashMap<String, String> map = new HashMap<String, String>();

    String quantity = "1";

    map.put(FOODID3, itemID);
    map.put(FOODNAME3, itemValue);  
    map.put(FOODQUANTITY3, quantity);

    boolean found = false;

    if (!LIST3.isEmpty())
    {
        for (int i = 0; i < LIST3.size(); i++)
        {
            String exists = null;
            exists = LIST3.get(i).get(FOODID3).toString();

            if (exists.equals(itemID))
            {
                found=true;
                String b = LIST3.get(i).get(FOODQUANTITY3);
                int quantityy = Integer.parseInt(b) +1;
                String c = Integer.toString(quantityy);
                System.out.println(c);
                LIST3.get(i).put(FOODQUANTITY3, c); // I can't update the value here
                break;
            }
        }
    }               

    if (!found)
    {
        LIST3.add(map);
    }

    LISTORDER = (ListView) findViewById(R.id.listOrder);

    List3Adapter adapter = new List3Adapter(MainActivity.this, LIST3);
    LISTORDER.setAdapter(adapter);
}

答案 1 :(得分:1)

System.out.println("start");
HashMap<String,String> a1 = new HashMap<String, String>();
a1.put("a1", "true");
a1.put("a1", "true2");
System.out.println("final value is ==" + a1.get("a1"));

我这样做了,我得到了true2所以没有概率替换或覆盖HashMap中的值,只是做一些断点并检查我认为错误是其他地方可能是值你想输入的也是正确的可能是空检查一次。

可能是if(exists.equals(itemID))始终为false只需调试一次

答案 2 :(得分:0)

只需替换像这样的值

int position;

map.get(position).put("String");