2013-08-13 4 views
0

Как отправить несколько записей за один раз с помощью json? Этот код является образцом, который я нашел в Интернете, но мне нужно отправить 100 объектов или записей за раз. Данные поступают из базы данных.Отправить несколько записей через json для php mysql

protected String doInBackground(String... args) { 
     String name = inputName.getText().toString(); 
     String price = inputPrice.getText().toString(); 
     String description = inputDesc.getText().toString(); 

     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("name", name)); 
     params.add(new BasicNameValuePair("price", price)); 
     params.add(new BasicNameValuePair("description", description)); 

     // getting JSON Object 
     // Note that create product url accepts POST method 
     JSONObject json = jsonParser.makeHttpRequest(url_create_product, 
       "POST", params); 
+1

как насчет просто с помощью цикла и отправки 100 из них ? –

+0

На самом деле вы не отправляете json, вы просто получаете его. Чтобы отправить более одного элемента, вам нужно знать, как сервер ожидает более одного элемента. В настоящее время не существует способа сделать это, кроме рекомендаций @ ns47731. – 323go

+0

Я создал цикл, но данные, полученные сервером, были непоследовательными. на стороне приема отсутствовали записи. часть андроида была в порядке. Кто-то дал мне идею создания объектов и добавления их в массив. Он работал потрясающе и намного быстрее на стороне сервера. –

ответ

0

Вы должны создать JSONObject, которые представляют объекты, и добавить его к запросу:

Если у вас есть эта структура, например:

{[{имя: "name1", цены: "10 "}, {имя:" name2" , стоимость: "15"}]}

JSONArray elements=new JSONArray(); 
    JSONObject aux=new JSONObject().put("name", "name1"); 
    aux.put("price", 10); 
    array.put(aux); 

    aux=new JSONObject().put("name1", "name2"); 
    aux.put("price", 20); 
    array.put(aux); 

List<NameValuePair> parameters= new ArrayList<NameValuePair>(); 
parameters.add(new BasicNameValuePair("json", elements.toString())); 
HttpPost post = new HttpPost(url); 
post.setEntity(new UrlEncodedFormEntity(pairs)); 
HttpClient cliente = createHttpClient(); 
return cliente.execute(post); 

а на сервере вы ловите параметр "JSON"

+0

Это сообщение помогло мне понять больше всего! Я смог понять идею создания объекта и помещения его в массив. создание другого объекта и добавление его в массив и т. д. и т. д. ... –

0

Вы можете написать список данных в String, а затем отправить его на php url. В php json_decode для чтения списка данных;

public static class Entity{ 
     private String name; 
     private String price; 
     private String description; 

     public String getName() { 
      return name; 
     } 

     public void setName(String name) { 
      this.name = name; 
     } 

     public String getPrice() { 
      return price; 
     } 

     public void setPrice(String price) { 
      this.price = price; 
     } 

     public String getDescription() { 
      return description; 
     } 

     public void setDescription(String description) { 
      this.description = description; 
     } 
    } 

    @Test 
    public void send() throws Exception{ 
     ObjectMapper mapper = new ObjectMapper(); 
     List<Entity> list = new ArrayList<Entity>(); // get the list of Entity; 
     String json = mapper.writeValueAsString(list); // write list as json 

     HttpClient client = new DefaultHttpClient(); 
     HttpPost post = new HttpPost("http://url.to.post"); 

     StringEntity entity = new StringEntity(json); 
     post.setEntity(entity); 

     HttpResponse response = client.execute(post); 

     String result = EntityUtils.toString(response.getEntity()); 
     Object responseObject = mapper.readValue(result, Object.class); 
    } 

Для того, чтобы использовать ObjectMapper вам потребуется ДЖЕКСОН-ядро-над уровнем море и ДЖЕКСОН-картограф-ASL в ваших LIBS.

+0

Спасибо за помощь! ;) –