2015-05-04 3 views
0

Я пытаюсь отправить json-файл на удаленный сервер. Если я пытаюсь его, используя этот сайт:Не удается отправить json на сервер

https://www.hurl.it/ пропускание JSON как это: enter image description here

это работает. Но если я попробую это из своего кода, у меня есть некоторые проблемы.

ArrayList<NameValuePair> nameValuePairs1 = new ArrayList<NameValuePair>(); 

      JSONArray list1 = new JSONArray(); 
      list1.add("12345678"); 

      Map obj=new LinkedHashMap(); 
      obj.put("company_id","1"); 
      obj.put("phones", list1); 
      obj.put("name","Alexy"); 
      obj.put("birthdate","12.03.2014"); 
      obj.put("email","[email protected]"); 

      nameValuePairs1.add(new BasicNameValuePair("json", obj.toString())); 

      try { 

       URL url = new URL("http://crm.pavlun.info/api/register"); 

       HttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost(url.toURI()); 

       httpPost.setEntity(new StringEntity(nameValuePairs1.toString(), "UTF-8")); 

       httpPost.setHeader("Content-Type", "application/json"); 
       httpPost.setHeader("Accept-Encoding", "application/json"); 

       HttpResponse response = httpClient.execute(httpPost); 
       Log.e("r ", response.toString()); 


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

Это мой JSON пример: мне нужно создать что-то вроде этого: "json":{"company_id":"1","phones":["555555"],"photo":"/files/clients_photos/tmp/484629825.JPG","name":"sdfsdfdsf","birthdate":"10.02.2014", "email":"[email protected]"}

UPD:

Я следующее сообщение об ошибке:

{"status":"error","message":"Customer data is empty!"} 

Может быть что-то есть неправильно в моем json.

UDP:

рабочий код

ArrayList<NameValuePair> nameValuePairs1 = new ArrayList<NameValuePair>(); 

      JSONObject joB = new JSONObject(); 

      JSONArray list1 = new JSONArray(); 
      list1.add("258963147"); 

      Map obj=new LinkedHashMap(); 
      obj.put("company_id","1"); 
      obj.put("phones", list1); 
      obj.put("name","Alexy"); 
      obj.put("birthdate","12.03.2014"); 
      obj.put("email","[email protected]"); 

      org.json.JSONObject jsonqwe; 

      try { 
       JSONParser operationLink = new JSONParser(); 
       ArrayList<NameValuePair> postP = new ArrayList<NameValuePair>(); 
       postP.add(new BasicNameValuePair("json", JSONValue.toJSONString(obj))); 
       jsonqwe = operationLink.makeHttpRequest("http://crm.pavlun.info/api/register", "POST", postP); 

       Log.e("sad", jsonqwe.toString()); 


      }catch(Exception e) { 
       e.printStackTrace(); 
      } 
+1

какую ошибку вы получили? Вы запустили свой код внутри своего пользовательского интерфейса? –

+0

@ yaa110 У меня есть сервер ошибок '{" status ":" error "," message ":" Данные клиента пустые! "}' Maby i не правильно, или неправильно мой json – pot34731

+1

Можете ли вы распечатать json перед его отправкой? – GVillani82

ответ

1

Вы проблема заключается в том, что вы не строит объект JSON, но с использованием toString() метода карты, который не даст вам правильно отформатированный объект JSON.

Попробуйте JSONObject's constructor, который берет карту как параметр. И чем позвонить toString() в JSONObject.

1

Эта линия будет возвращать мусор (насколько сервер обеспокоен)

nameValuePairs1.toString() 

поскольку ArrayList делает реализацию toString, как вы ожидаете. Вместо этого вы должны использовать JSONArray/JSONObject.

1

Попробуйте изменить лет

Map obj=new LinkedHashMap(); 

в

JSONObject obj=new JSONObject(); 

вам нужно отправить значение, JSON

+0

Это использует карту: https://code.google.com/p/json -simple/wiki/EncodingExamples и если я изменяю его все еще не работаю ( – pot34731

+1

Изменить имяValuePairs1.add (новый BasicNameValuePair ("json", obj.toString())); nameValuePairs1.add (новый BasicNameValuePair ("json", JSONValue. toJSONString (obj))) –

+1

см. пример 1-3 - кодирование объекта JSON - использование карты в wiki –

1

более подходящее решение было бы построить JSONObject вместо карты вы находитесь с помощью. Что-то вроде этого:

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
JSONArray phoneNumbers = new JSONArray(); 
phoneNumbers.add("12345678"); 
JSONObject obj=new JSONObject(); 
obj.put("company_id","1"); 
obj.put("phones", phoneNumbers); 
obj.put("name","Alexy"); 
obj.put("birthdate","12.03.2014"); 
obj.put("email","[email protected]"); 

nameValuePairs.add(new BasicNameValuePair("json", obj.toString())); 

try { 

URL url = new URL("http://crm.pavlun.info/api/register"); 

HttpClient httpClient = new DefaultHttpClient(); 
HttpPost httpPost = new HttpPost(url.toURI()); 

httpPost.setEntity(new StringEntity(nameValuePairs.toString(), "UTF-8")); 

httpPost.setHeader("Content-Type", "application/json"); 
httpPost.setHeader("Accept-Encoding", "application/json"); 

HttpResponse response = httpClient.execute(httpPost); 
Log.e("r ", response.toString()); 


}catch(Exception e) { 
e.printStackTrace(); 
} 
+0

У меня есть '05-04 21: 54: 22.960: E/responseString: (10174): {" status ":" error "," message ":" Данные клиента пустые! "} '( – pot34731

1

В примере сайта hurl отправляется одна пара ценностей имени. Чтобы отправить имя значения pais, ваш тип содержимого должен быть закодирован в URL-адресе.Меняем:

  httpPost.setHeader("Content-Type", "application/json"); 
      httpPost.setHeader("Accept-Encoding", "application/json"); 

в

  httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded"); 

Может быть, это поможет:

  httpPost.setHeader("ENCTYPE","multipart/form-data"); 

EDIT:

Как другие уже провозглашены не использовать карту, но в JSONObject. Затем измените

httpPost.setEntity(new StringEntity(nameValuePairs1.toString())); 

к:

String nameValuPairsText = nameValuePairs.toString();     
nameValuPairsText = nameValuPairsText.substring(1, nameValuPairsText.length()-1); 
httpPost.setEntity(new StringEntity(nameValuPairsText, "UTF-8"));    
Смежные вопросы