如何将所有json对象值存储在arraylist中?

问题描述 投票:0回答:5

我有以下响应...从这个响应中我正在解析bulkprice数组及其对象,现在我正在尝试的是我需要将所有minqty值存储在一个数组列表中并希望将所有这些值转换为Integer..但是我无法理解..

{"status":"success","clientproduct":[{"pid":"4","name":"kangan pair","unitprice":"1500","boxqty":"1","bulkprice":[{"minqty":"10","price":"1500"},{"minqty":"15","price":"1470"},{"minqty":"20","price":"1460"}]}]}

MainActivity.java

@Override
    protected String doInBackground(String...args) {
        //Check for success tag
        //int success;
        Looper.prepare();

         try {
             List<NameValuePair> params = new ArrayList<NameValuePair>();
             params.add(new BasicNameValuePair("cid",letss));
             params.add(new BasicNameValuePair("action", "clientproduct"));

             System.out.println("????"+params);

             Log.d("request!", "starting");
             // getting product details by making HTTP request
             JSONObject json = jsonParser.makeHttpRequest (
                 FEEDBACK_URL, "POST", params);
             //check your log for json response
               Log.d("Login attempt", json.toString());
            if (json != null) {
                try {
                    JSONObject jsonObj = new JSONObject(json.toString());

                    // Getting JSON Array node
                    clientproduct = jsonObj.getJSONArray(CLIENTPRODUCT_LIST);

                    // looping through All Contacts
                    for (int i = 0; i < clientproduct.length(); i++) {
                       ck = clientproduct.getJSONObject(i);

                       unitp=ck.getString("unitprice");
                        System.out.println("Unit ni price"+unitp);

                       boxq=ck.getString("boxqty");
                        System.out.println("Box ni quantity "+boxq);

                        bulkprice = ck.getJSONArray(BULKPRICE_LIST);

                        allqtys=new ArrayList<String>();
                         for (int b=0 ; b < bulkprice.length(); b++)
                         {
                             jo = bulkprice.getJSONObject(b);

                           minimum_qty=jo.getString("minqty");
                        allqtys.add(minimum_qty);
                            /* allqtys=new ArrayList<String>();
                           allqtys.add(minimum_qty.toString());
                          System.out.println("All MinQuantitiy"+minimum_qty);*/
                     System.out.println("All MinQuantitiy"+allqtys);
                       System.out.println("MinQuantitiy"+minimum_qty);

                           pricess=jo.getString("price");
                            System.out.println("Box price "+pricess);

                         }
                         /*conrs=Integer.parseInt(allqtys.toString());
                         System.out.println("Integer converted arrray"+conrs);*/

                        /* newList = new ArrayList<Integer>(allqtys.size()) ;
                         for (String myInt : allqtys) 
                         { 
                           newList.add(Integer.valueOf(myInt)); 
                         }
                         System.out.println("allqtys "+newList);*/

                        System.out.println("Not Null");
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else {
                Log.e("ServiceHandler", "Couldn't get any data from the url");
            }


         return json.getString(FEEDBACK_SUCCESS);

     }catch (JSONException e) {
         e.printStackTrace();
     }
     return null;
}

    // After completing background task Dismiss the progress dialog

    protected void onPostExecute(String file_url) {
        //dismiss the dialog once product deleted
        pDialog.dismiss();

       /* ArrayList<Integer> allval=new ArrayList<Integer>();
       // allval.add(minimum_qty);
       System.out.println("Integer converted arraylist"+allval);*/


        autoproduct.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
                // uprice.setText(unitp);
                    //bxqtyy.setText(boxq);
            }
        });


        bxqtyy.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub
                if(Integer.parseInt(bxqtyy.getText().toString()) > allqtys)
                {
                    if(bxqtyy.getText().equals(null))
                    {
                        uprice.setText(unitp);
                    }
                    uprice.setText("1470");
                    //System.out.println("lets check");
                }
                else
                {
                    uprice.setText("1500");
                    System.out.println("lets check");
                }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {


            }

            @Override
            public void afterTextChanged(Editable s) {


            }
        });

}}

日志猫

04-29 13:16:52.579: I/System.out(953): All MinQuantitiy[10]
04-29 13:16:52.609: I/System.out(953): MinQuantitiy10
 04-29 13:16:52.639: I/System.out(953): Box price 1500
04-29 13:16:52.639: I/System.out(953): All MinQuantitiy[10, 15]
04-29 13:16:52.639: I/System.out(953): MinQuantitiy15
04-29 13:16:52.639: I/System.out(953): Box price 1470
 04-29 13:16:52.679: I/System.out(953): All MinQuantitiy[10, 15, 20]
04-29 13:16:52.709: I/System.out(953): MinQuantitiy20
04-29 13:16:52.709: I/System.out(953): Box price 1460
android json android-edittext
5个回答
1
投票

试试这个:

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

JSONArray array = ck.getJSONArray(BULKPRICE_LIST);
for (int i = 0; i < array.length(); i++) {
    JSONObject row = array.getJSONObject(i);
    int minqty = row.getInt("minqty");
    minqtyList.add(minqty);
}

在您的代码中,您需要像这样编辑这部分:

bulkprice = ck.getJSONArray(BULKPRICE_LIST);
allqtys=new ArrayList<String>(); // initialisation must be outside the loop

for (int b=0 ; b < bulkprice.length(); b++){
    jo = bulkprice.getJSONObject(b);
    minimum_qty=jo.getString("minqty");
    allqtys.add(minimum_qty);

    System.out.println("All MinQuantitiy"+minimum_qty);
    System.out.println("MinQuantitiy"+minimum_qty);

    pricess=jo.getString("price");// here you'll get only the last value. otherwise you need to use a list, like you did with "minqty"
    System.out.println("Box price "+pricess);
}

0
投票

我建议您使用 JSONArray 来存储 json 值并迭代它们:

String strJSON = ""; // your string goes here
List<int> minqtys = new ArrayList<int>();

JsonReader rdr = Json.createReader(new StringReader(strJSON)) {
    JsonObject obj = rdr.readObject();
    JsonArray results = obj.getJsonArray("bulkprice");
    for (JsonObject result : results.getValuesAs(JsonObject.class)) {
         int minqty = Integer.parseInt(result.getString("minqty"));
         minqtys.add(minqty);
    }
});

0
投票

您可以通过使用Gson轻松实现这一点。

示例:

 List<CustomObject> myList = gson.fromJson(br, new
 TypeToken<List<CustomObject>>(){}.getType());

0
投票

使用此代码..

String json="{\"status\":\"success\",\"clientproduct\":[{\"pid\":\"4\",\"name\":\"kangan pair\",\"unitprice\":\"1500\",\"boxqty\":\"1\",\"bulkprice\":[{\"minqty\":\"10\",\"price\":\"1500\"},{\"minqty\":\"15\",\"price\":\"1470\"},{\"minqty\":\"20\",\"price\":\"1460\"}]}]}";

        String json1="{\"status\":\"success\",\"clientproduct\":[{\"pid\":\"4\",\"name\":\"kangan pair\",\"unitprice\":\"1500\",\"boxqty\":\"1\",\"bulkprice\":[{\"minqty\":\"10\",\"price\":\"1500\"},{\"minqty\":\"15\",\"price\":\"1470\"},{\"minqty\":\"20\",\"price\":\"1460\"}]},{\"pid\":\"6\",\"name\":\"Mala\",\"unitprice\":\"1500\",\"boxqty\":\"1\",\"bulkprice\":\"\"}]}";
        JSONObject jsonobj;
        List<HashMap<String,String>> minqty_list=new ArrayList<HashMap<String,String>>();
        try {
            jsonobj = new JSONObject(json1);
            JSONArray client_product=jsonobj.getJSONArray("clientproduct");
            for(int i=0;i<client_product.length();i++)
            {
                JSONObject client_prod=client_product.getJSONObject(i);
                try
                {
                JSONArray bulkprice=client_prod.getJSONArray("bulkprice");

                for(int j=0;j<bulkprice.length();j++)
                {
                    HashMap<String, String> hs=new HashMap<String, String>();
                    hs.put("bulk",bulkprice.getJSONObject(j).getString("minqty"));
                    minqty_list.add(hs);
                }
                }catch(JSONException e)
                {
                    e.printStackTrace();
                }
            }
            System.out.println(minqty_list.toString());
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

在上面的代码中将其更改为

JSONArray bulkprice=client_prod.getJSONArray("bulkprice");
                       for(int j=0;j<bulkprice.length();j++)
                       {
                           minqty_list.add(Integer.parseInt(bulkprice.getJSONObject(j).getString("minqty")));
                       }

到此

try
                {
                JSONArray bulkprice=client_prod.getJSONArray("bulkprice");

                for(int j=0;j<bulkprice.length();j++)
                {
                    HashMap<String, String> hs=new HashMap<String, String>();
                    hs.put("bulk",bulkprice.getJSONObject(j).getString("minqty"));
                    minqty_list.add(hs);
                }
                }catch(JSONException e)
                {
                    e.printStackTrace();
                }

0
投票

有趣的 loadFontsFromJson(context: Context): ArrayList { val 字体列表 = ArrayList() val json: 字符串 尝试 { val inputStream = context.assets.open("font_list.json") val 大小 = inputStream.available() val 缓冲区 = ByteArray(大小) 输入流.read(缓冲区) 输入流.close() json = kotlin.String() val jsonObject = JSONObject(json) val fontArray = jsonObject.getJSONArray("fontList") for (i in 0 直到 fontArray.length()) { val 字体 = fontArray.getString(i) 字体列表.add(字体) } } catch (e: IOException) { e.printStackTrace() } catch (e: JSONException) { e.printStackTrace() } 返回字体列表 }

© www.soinside.com 2019 - 2024. All rights reserved.