2015-06-08 5 views
0

Я пытаюсь отправить некоторые данные на свой сервер, но я не знаю, почему, я всегда получаю от него 400 сообщений.POST Android json data

Я хочу послать эту POST структуру:

POST /api/v0.1/observations/3 HTTP/1.1 
Host: 54.154.117.132` 
Content-Type: application/json 
Cache-Control: no-cache 

{ 
    "data" : 
    { 
     "field1" : 1111111 
    }, 
    "timestamp": "2015-05-13T12:23:42.648738" 
} 

Если я посылаю, что с завитком или wget, я получаю статус 200 Http.

Я делаю это на андроид:

public void POST(String json) throws MalformedURLException { 

    int httpResult; 
    //URL url = new URL(getString(R.string.URL)); 
    URL url = new URL(getString(R.string.URL_test2)); 
    HttpURLConnection con; 

    JSONObject obj1 = new JSONObject(); 
    JSONObject obj2 = new JSONObject(); 

    try { 
     obj1.put("field1",222); 
     obj2.put("data", obj1); 
     obj2.put("timestamp", "2015-06-8T12:05:42.648738"); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 


    try { 
     con = (HttpURLConnection) url.openConnection(); 
     con.setDoOutput(true); 
     con.setRequestMethod("POST"); 
     con.setUseCaches(false); 
     con.setConnectTimeout(10000); 
     con.setReadTimeout(10000); 
     con.setRequestProperty("Content-Type","application/json"); 
     con.setRequestProperty("Host", "54.154.117.132"); 
     con.connect(); 

     OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream()); 
     out.write(obj2.toString()); 
     out.close(); 

     httpResult = con.getResponseCode(); 
     Log.i("Request","--> "+httpResult); 
     if (httpResult == HttpURLConnection.HTTP_OK) Log.i("HTTP"," --> all ok"); 
     else Log.i("HTTP", " --> smthg wrong!"); 

    } catch (IOException e) { 
     Log.i("ERROR"," !!! Interrupcion a la hora de conectarse"); 
    } 
} 

Я не знаю, если это точно такая же структура, что это мой вывод, потому что с помощью почтальона на хроме, и локон или wget, получите 200 положение дел.

Кто-нибудь может мне помочь?

URL-адрес, если вы хотите попробовать, находится на методе POST сверху.

+0

Что произойдет, если вы закомментировать "con.connect();" – Knossos

+0

Ваш json синтаксически ошибочен –

+0

@JunedAhsan, почему вы так сказали? Json прав, я проверяю на некоторых сайтах интернета, если вы имеете в виду тот, что на Android-коде, ключи или значение не обязательно должны совпадать с примером POST сверху. –

ответ

1

Добавьте Params в JSONObject, как показано ниже:

JSONObject jsonObject = new JSONObject(); 
jsonObject .put("field", 222); 
     JSONObject mainObject = new JSONObject(); 
     try { 
      mainObject .put("data",jsonObject); 
      mainObject .put("timestamp","2015-05-13T12:23:42.648738"); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

И изменить здесь в коде:

OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream()); 
     out.write(mainObject.toString()); //change to mainObject from obj2 
     out.close(); 
+0

yeeees !! это работает!! Можете ли вы сказать мне разницу? –

+0

См. Строку json. У объекта есть объект внутри другого объекта данных, и вы отправляете все параметры только в одном объекте – Pankaj

+0

, если я хочу отправить параметр «loc»: [1.23, 2.76], как я могу это сделать правильно? ? –