如何使用Json发布HasMap的多个值

时间:2016-02-12 10:21:31

标签: android android-asynctask

我正在开发洗衣应用程序,在这个应用程序中,用户可以选择多个项目和我存储的项目

HashMap<String, ArrayList<Integer>> All;  

我的HashMap值看起来像这样

Key:Name, Value:[Quantity, Default-Price, Total_price, position]
    Key: Trouser, Value: [2, 8, 16, 3]
    Key: Shirt, Value: [3, 15, 45, 0]
    Key: Coat, Value: [2, 7, 14, 2]
    Key: Pants, Value: [3, 10, 30, 1] 

所以,我的问题是如何将这些项目发布到server.i我是android新手,所以请帮助我。

这是我的AsyncTask

public static class AddItemDB extends AsyncTask<Void, Integer, Void> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(Void... params) {

            All = new HashMap<String, ArrayList<Integer>>();
            All.putAll(ListAdapter.DryMap);
            All.putAll(ListAdapter.IronMap);
            All.putAll(ListAdapter.WashMap);
            All.putAll(ListAdapter.WashIronMap);

            JSONParser jParser = new JSONParser();

            for (Map.Entry<String, ArrayList<Integer>> item : All.entrySet()) {

                for (int i = 0; i < All.size(); i++) {

                    String URL = "http://.com/mis/Laundry/insert_cart.php?" + "p_name=" + All.get(i) + "&p_quantity=" + item.getValue().get(0) +
                            "&p_price=" + item.getValue().get(1) + "&r_id=2&c_id=1&ct_id=1";

                    jParser.makeServiceCall(URL, JSONParser.POST);


                }

            }

            return null;
        }

        @SuppressLint({"ShowToast", "LongLogTag"})
        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);

            Log.d("Mission Successfulllll...............", "");
        }
    }

当我尝试上面的代码时,我无法在数据库中获得正确的数据。

3 个答案:

答案 0 :(得分:1)

试试这段代码希望这项工作

  Iterator<Map.Entry<String, ArrayList<Integer>>> iterator = All.entrySet().iterator();

            while (iterator.hasNext()) {

                Map.Entry<String, ArrayList<Integer>> entry = iterator.next();

                System.out.printf("Key : %s and Value: %s %n", entry.getKey(),
                        entry.getValue().get(0));

                String URL = "http://.com/mis/Laundry/insert_cart.php?" + "p_name=" + entry.getKey() + "&p_quantity=" + entry.getValue().get(0) +
                        "&p_price=" + entry.getValue().get(1) + "&r_id=2&c_id=1&ct_id=1";

                String jsonstr = jParser.makeServiceCall(URL, JSONParser.POST);

                iterator.remove(); // right way to remove entries from Map,
                // avoids ConcurrentModificationException

            }

答案 1 :(得分:0)

HashMap<String, ArrayList<Integer>> All = new HashMap<String, ArrayList<Integer>>();
            All.putAll(ListAdapter.DryMap);
            All.putAll(ListAdapter.IronMap);
            All.putAll(ListAdapter.WashMap);
            All.putAll(ListAdapter.WashIronMap);

JSONObject object = new JSONObject(ALL);
String URL = "http://.com/mis/Laundry/insert_cart.php?jsondata="+ object.toString();
jParser.makeServiceCall(URL, JSONParser.POST);

答案 2 :(得分:0)

  

试试这个!

HashMap<String, ArrayList<Integer>> All = new LinkedHashMap<>();

        ArrayList<Integer> integers = new ArrayList<>();

        integers.add(2);
        integers.add(3);
        integers.add(4);
        integers.add(5);

        All.put("Trouser", integers);
        All.put("Shirt", integers);
        All.put("Coat", integers);
        All.put("Pants", integers);

        Log.e("mapString", All.toString());

字符串日志如下所示

{Trouser=[2, 3, 4, 5], Shirt=[2, 3, 4, 5], Coat=[2, 3, 4, 5], Pants=[2, 3, 4, 5]}
  

因此,您可以将其发送到服务器,然后您可以定义   用键解析逻辑!

希望它会帮助你我的朋友!