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

У меня есть массив, содержащий несколько строк данных, которые я хочу передать с Android на сервер PHP, где он отображается. Я поместил содержимое массива в объект 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:

        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 строки / записи

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 после каждого цикла. Прямо сейчас вы только снова и снова переопределяете последнее установленное значение.

1

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

0

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

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector