в объекте JSON сохраняется только последняя строка массива

1

У меня есть arraylist, содержащий несколько строк данных, которые я хочу передать из android на PHP-сервер, где он отображается. Я разместил содержимое arraylist в объекте JSON, который я передал в список имя-значение-пара перед синтаксическим разбором.

Моя проблема в том, когда я вывожу значение полученного JSON. Он отображает только последние записи.

PHP-код:

<?php


if($_POST)
{
echo "Smething was sent";

$JSON_Entry = $_POST["Entry"];

$obj = json_decode($JSON_Entry);

$i = 0;

print_r($obj);
}

?>

JAVA CODE:

        ArrayList<SalesReciepts> entryList = db.getSalesRecords();

        List<NameValuePair> postVars = new ArrayList<NameValuePair>();



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

            try {
                JSONentry.put("id", String.valueOf(entryList.get(i).getEntryId()));
                JSONentry.put("invoice",String.valueOf(entryList.get(i).getInvoice_id()));
                JSONentry.put("product", String.valueOf(entryList.get(i).getProduct()));
                JSONentry.put("qty", String.valueOf(entryList.get(i).getQty()));
                JSONentry.put("total", String.valueOf(entryList.get(i).getTotal()));
            }
            catch(JSONException e) {
                e.printStackTrace();
            }

        }



        JSONObject sent = new JSONObject();


        try {
            sent.put("records", String.valueOf(JSONentry));
        }
        catch(JSONException e) {
            e.printStackTrace();
        }


        postVars.add(new BasicNameValuePair("Entry", String.valueOf(sent)));


        //Declare and Initialize Http Clients and Http Posts
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(POST_PRODUCTS);

        //Format it to be sent
        try {
            httppost.setEntity(new UrlEncodedFormEntity(postVars));

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        /* Send request and Get the Response Back */
        try {

            HttpResponse response = httpclient.execute(httppost);
            String responseBody = EntityUtils.toString(response.getEntity());


            Log.e("response:", responseBody );

        } catch (ClientProtocolException e) {
            e.printStackTrace();

            Log.v("MAD", "Error sending... ");


        } catch (IOException e) {
            e.printStackTrace();

            Log.v("MAD", "Error sending... ");


        }

ВЫВОД:

  Smething was sent{"records":"{\"total\":\"1398.0\",\"product\":\"Carlsberg\",\"id\":\"0\",\"qty\":\"2\",\"invoice\":\"2.4082015083321E13\"}"}

На выходе отображается последняя из 3 строк/записей

Теги:
arraylist

4 ответа

1
Лучший ответ

Вам нужно создать новый JSONentry для каждой итерации цикла, а затем добавить его в свой JSONArray.

Измените свой код следующим образом:

            ArrayList<SalesReciepts> entryList = db.getSalesRecords();

            List<NameValuePair> postVars = new ArrayList<NameValuePair>();

            JSONArray recordsJsonArray = = new JSONArray();


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

                try {
                    JSONObject JSONentry = new JSONObject(); // here you create a new JSONObject

                    JSONentry.put("id", String.valueOf(entryList.get(i).getEntryId()));
                    JSONentry.put("invoice",String.valueOf(entryList.get(i).getInvoice_id()));
                    JSONentry.put("product", String.valueOf(entryList.get(i).getProduct()));
                    JSONentry.put("qty", String.valueOf(entryList.get(i).getQty()));
                    JSONentry.put("total", String.valueOf(entryList.get(i).getTotal()));

                    recordsJsonArray.put(JSONentry); // here you add the item to your array
                }
                catch(JSONException e) {
                    e.printStackTrace();
                }

            }

            JSONObject sent = new JSONObject();

            try {
                sent.put("records", String.valueOf(recordsJsonArray));
            }
            catch(JSONException e) {
                e.printStackTrace();
            }

            postVars.add(new BasicNameValuePair("Entry", String.valueOf(sent)));
1

Вы должны создать новый JSONentry после каждого цикла. Сейчас вы только переопределяете последнее заданное значение снова и снова.

0

Не будучи специалистом по Java, но я бы сказал, что вам нужно изменить эту строку и следующие JSONentry.put("id", String.valueOf(entryList.get(i).getEntryId())); с чем-то вроде "id []", но опять же - я не эксперт JAVA, но похоже, что вы переопределяете одни и те же значения снова и снова, и поэтому только последний попадает в скрипт PHP.

0

Ваш JSONEntry - это JSONObject. Вам нужно сделать JSONArray, где вы поместите свой другой JSONEntry

Ещё вопросы

Сообщество Overcoder
Наверх
Меню