无法将json发送到服务器

时间:2015-05-04 18:29:46

标签: android json server

我正在尝试将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","nesalexy@mail.ru");

            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":"sdf@sdf.ff"}

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","nesalexy@mail.ru");

            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();
            }

5 个答案:

答案 0 :(得分:1)

你的问题是你没有构建一个JSON对象,而是使用了地图的toString()方法,它不会为你提供格式正确的JSON对象。

尝试将地图作为参数的JSONObject constructor。而不是在JSONObject上调用toString()

答案 1 :(得分:1)

此行将返回垃圾(就服务器而言)

nameValuePairs1.toString()

因为ArrayList确实像您期望的那样实现toString。您应该使用JSONArray / JSONObject代替。

答案 2 :(得分:1)

尝试更改

Map obj=new LinkedHashMap();

JSONObject obj=new JSONObject();

您需要发送JSON值

答案 3 :(得分:1)

更合适的解决方案是构建JSONObject而不是您正在使用的Map。像这样:

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","nesalexy@mail.ru");

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();
}

答案 4 :(得分:1)

In the hurl site example one name valu pair is sent. To send name value pais your content type should be form url encoded. So change:

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

to

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

Maybe this will help:

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

EDIT:

As others already stated do not use a Map but a JSONObject. Then change

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

to:

String nameValuPairsText = nameValuePairs.toString();                
nameValuPairsText = nameValuPairsText.substring(1, nameValuPairsText.length()-1);   
httpPost.setEntity(new StringEntity(nameValuPairsText, "UTF-8"));